题目描述
有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。
给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。
测试样例:
["a","b","c","ab","bc","abc"],6
返回:3
bool compare(string str1,string str2)
{
return str1.size()<str2.size();
}
class LongestString
{
public:
bool match(vector<string>& str,string s,int k) //判断第k+1个字符串能否由前k个字符串表示
{
for(int i=k-1;i>=0;i--)
{
if(str[i]==s)
return true;
if(str[i].size()<s.size())
break;
}
for(int i=1;i<s.size();i++)
{
if(match(str,s.substr(0,i),k)&&match(str,s.substr(i),k))
return true;
}
return false;
}
int getLongest(vector<string> str, int n)
{
// write code here
int length=0;
sort(str.begin(),str.end(),compare);
for(int i=str.size()-1;i>=0;i--)
{
if(match(str,str[i],i))
{
length=str[i].size();
break;
}
}
return length;
}
};