leetcode 1593. 拆分字串使唯一子字串的數目最大(DFS,剪枝)
阿新 • • 發佈:2020-11-22
題目連結
leetcode 1593. 拆分字串使唯一子字串的數目最大
題意:
給你一個字串 s ,請你拆分該字串,並返回拆分後唯一子字串的最大數目。
字串 s 拆分後可以得到若干 非空子字串 ,這些子字串連線後應當能夠還原為原字串。但是拆分出來的每個子字串都必須是 唯一的 。
注意:子字串 是字串中的一個連續字元序列。
思路:
DFS,一段一段的判斷,利用unordered_set判重,不用unordered_map是為了方便剪枝
剪枝:
如果當前set.size()+剩下的未判斷的字串的長度< ans,則剪枝,除去這種情況
class Solution { public: int ans=1; void dfs(string s,unordered_set<string> st,int cnt){ if(!s.size()){ ans=max(ans,cnt); return ; } for(int i=0;i<s.size();i++){ string cur=s.substr(0,i+1); if(st.size()+s.size() < ans) continue; if(!st.count(cur)){//回溯的時候不要使用 ump.count() 因為key之前就有了 st.insert(cur); dfs(s.substr(i+1),st,cnt+1); // ump[cur]--; st.erase(cur); } } } int maxUniqueSplit(string s) { //直接用set unordered_set<string> st; dfs(s,st,0); return ans; } };