加载中...
1593-拆分字符串使唯一子字符串的数目最大(Split a String Into the Max Number of Unique Substrings)
发表于:2021-12-03 | 分类: 中等
字数统计: 746 | 阅读时长: 3分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/split-a-string-into-the-max-number-of-unique-substrings

英文原文

Given a string s, return the maximum number of unique substrings that the given string can be split into.

You can split string s into any list of non-empty substrings, where the concatenation of the substrings forms the original string. However, you must split the substrings such that all of them are unique.

A substring is a contiguous sequence of characters within a string.

 

Example 1:

Input: s = "ababccc"
Output: 5
Explanation: One way to split maximally is ['a', 'b', 'ab', 'c', 'cc']. Splitting like ['a', 'b', 'a', 'b', 'c', 'cc'] is not valid as you have 'a' and 'b' multiple times.

Example 2:

Input: s = "aba"
Output: 2
Explanation: One way to split maximally is ['a', 'ba'].

Example 3:

Input: s = "aa"
Output: 1
Explanation: It is impossible to split the string any further.

 

Constraints:

  • 1 <= s.length <= 16

  • s contains only lower case English letters.

中文题目

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

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

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

 

示例 1:

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

示例 2:

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

示例 3:

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

 

提示:

  • 1 <= s.length <= 16

  • s 仅包含小写英文字母

通过代码

高赞题解

思路

  1. 回溯
  2. 使用一个哈希验证是否已有重复子串
  3. 判断剩余字符长度和已有答案,进行剪枝

答题

[]
class Solution { public: int maxUniqueSplit(string s) { dfs(s, 0); return ans; } void dfs(string& s, int pos) { if (s.size() - pos + us.size() <= ans) return; if (pos == s.size()) { ans = max(ans, (int)us.size()); return; } string temp; for (int i = pos; i < s.size(); i++) { temp += s[i]; if (us.find(temp) == us.end()) { us.insert(temp); dfs(s, i + 1); us.erase(temp); } } } private: int ans = 0; unordered_set<string> us; };

致谢

感谢您的观看,希望对您有帮助,欢迎热烈的交流!

如果感觉还不错就点个赞吧~

这是 我的leetcode ,帮助我收集整理题目,可以方便的 visual studio 调试,欢迎关注,star

统计信息

通过次数 提交次数 AC比率
5716 10591 54.0%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
1605-给定行和列的和求可行矩阵(Find Valid Matrix Given Row and Column Sums)
下一篇:
1592-重新排列单词间的空格(Rearrange Spaces Between Words)
本文目录
本文目录