题解 | #最长合成字符串#
最长合成字符串
http://www.nowcoder.com/practice/92a6faa7377f4c049a18154b24458d2a
①按照长度排序
②研究第k个字符串能否由其它拼接而成(只能由其后面更短的字符串)
③每次剪切掉头部=》递归判断
class LongestString { public: static bool cmp(string a,string b) { return a.size()>b.size(); } //研究str能否由arr中其它字符拼接而成 bool judge(vector<string>& arr,string str,int k) //从第k个开始 { if(str=="" ) return true; //研究第k个字符串 前面部分能否被剪切下来 for(int i=k+1;i<arr.size();i++) //从k+1开始 因为只能由更短的拼接而成 { int len=arr[i].size(); if(arr[i]==str.substr(0,len)) { //可以剪切 if(judge(arr,str.substr(len,str.size()-len),k)) //递归判断 { return true; } } } return false; } int getLongest(vector<string> str, int n) { // write code here sort(str.begin(),str.end(),cmp); //依次从最长的那个开始 研究其能否用其它单词拼接而成 //(即能否由更短单词拼接而成) for(int i=0;i<n;i++) if(judge(str,str[i],i)) return str[i].size(); return 0; } };