题目描述: 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。
请返回所有可行解 s 中最长长度。
示例 1:
输入:arr = [“un”,“iq”,“ue”] 输出:4 解释:所有可能的串联组合是 “”,“un”,“iq”,“ue”,“uniq” 和 “ique”,最大长度为 4。
思路: 回溯 对于每一个字符串,都与两种可能,加入到最终的字符中,或者不加入到最后的字符串中 然后求出最大值即可
代码如下:
class Solution { public: int maxLength(vector<string>& arr) { vector<int>m(26,0); return dfs(arr,0,m); } int dfs(vector<string>arr,int idx,vector<int>m){ if(idx==arr.size()) return 0; vector<int>t=m; if(isUnique(arr[idx],t)){ int len1=arr[idx].size()+dfs(arr,idx+1,t); int len2=dfs(arr,idx+1,m); return max(len1,len2); } else return dfs(arr,idx+1,m); } bool isUnique(string s,vector<int>&t){ for(char c:s){ t[c-'a']++; } for(int i:t){ if(i>1) return false; } return true; } };