【算法題】1593. 拆分字符串使唯一子字符串的數(shù)目最大

插: 前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。
堅(jiān)持不懈,越努力越幸運(yùn),大家一起學(xué)習(xí)鴨~~~

題目:

給你一個(gè)字符串 s ,請(qǐng)你拆分該字符串,并返回拆分后唯一子字符串的最大數(shù)目。

字符串 s 拆分后可以得到若干 非空子字符串 ,這些子字符串連接后應(yīng)當(dāng)能夠還原為原字符串。但是拆分出來的每個(gè)子字符串都必須是 唯一的 。

注意:子字符串 是字符串中的一個(gè)連續(xù)字符序列。

示例 1:

輸入:s = "ababccc"
輸出:5
解釋:一種最大拆分方法為 ['a', 'b', 'ab', 'c', 'cc'] 。像 ['a', 'b', 'a', 'b', 'c', 'cc'] 這樣拆分不滿足題目要求,因?yàn)槠渲械?'a' 和 'b' 都出現(xiàn)了不止一次。
示例 2:

輸入:s = "aba"
輸出:2
解釋:一種最大拆分方法為 ['a', 'ba'] 。
示例 3:

輸入:s = "aa"
輸出:1
解釋:無法進(jìn)一步拆分字符串。

提示:

1 <= s.length <= 16

java代碼:


class Solution {
    int maxSplit = 1;

    public int maxUniqueSplit(String s) {
        Set<String> set = new HashSet<String>();
        backtrack(0, 0, s, set);
        return maxSplit;
    }

    public void backtrack(int index, int split, String s, Set<String> set) {
        int length = s.length();
        if (index >= length) {
            maxSplit = Math.max(maxSplit, split);
        } else {
            for (int i = index; i < length; i++) {
                String substr = s.substring(index, i + 1);
                if (set.add(substr)) {
                    backtrack(i + 1, split + 1, s, set);
                    set.remove(substr);
                }
            }
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容