首页 > 其他 > 详细

LeetCode 1593. 拆分字符串使唯一子字符串的数目最大 dfs 哈希

时间:2020-09-21 22:11:33      阅读:63      评论:0      收藏:0      [点我收藏+]

地址 https://leetcode-cn.com/problems/split-a-string-into-the-max-number-of-unique-substrings/

给你一个字符串 s ,请你拆分该字符串,并返回拆分后唯一子字符串的最大数目。

字符串 s 拆分后可以得到若干 非空子字符串 ,这些子字符串连接后应当能够还原为原字符串。
但是拆分出来的每个子字符串都必须是 唯一的 。

注意:子字符串 是字符串中的一个连续字符序列。

 

示例 1:

输入:s = "ababccc"
输出:5
解释:一种最大拆分方法为 [a, b, ab, c, cc] 。
像 [a, b, a, b, c, cc] 这样拆分不满足题目要求,因为其中的 ab 都出现了不止一次。
示例 2:

输入:s = "aba"
输出:2
解释:一种最大拆分方法为 [a, ba] 。
示例 3:

输入:s = "aa"
输出:1
解释:无法进一步拆分字符串。
 

提示:

1 <= s.length <= 16

s 仅包含小写英文字母

算法1
DFS尝试从短至场尝试每种分割
使用哈希记录使用过的分割 避免切分出相同的单词

C++ 代码

class Solution {
public:
unordered_set<string>dict;
int ans = -1;

void dfs(string s)
{
    if (s.empty()) {
        ans = max((int)dict.size(), ans);
        return;
    }

    for (int len = 1; len <= s.size(); len++) {
        string split = s.substr(0, len);
        if (dict.count(split) == 0) {
            dict.insert(split);
            dfs(s.substr(len ));
            dict.erase(split);
        }
    }
}

int maxUniqueSplit(string s) {
    dfs(s);
    return ans;
}
};

 

LeetCode 1593. 拆分字符串使唯一子字符串的数目最大 dfs 哈希

原文:https://www.cnblogs.com/itdef/p/13707599.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!