话说这两天心里挺纠结的,,总是静不下心学习,,放假留校的孩纸伤不起啊!!!。。。
题意:这是一道搜索入门题,就是找所有字符串共有的最长串的长度。。。先把所有字符串从小到大排序,找出最短串,然后枚举最短串,(和反转串)需要注意一点就是从长到短进行枚举,,,一旦找到就是答案。。。
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string s[101];
int n;
bool cmp(string a,string b)
{return a.size()<b.size();}
string revers(string t)
{ string a="";
for(int i=t.size()-1;i>=0;--i)
a.append(1,t[i]);//相当于在a后面加一个字符t[i].
return a;
}
int f(string a)
{ int m=a.size();
for(int i=m;i>=1;--i)//子串从长到短枚举。。。。
for(int j=0;i+j<=m;++j)
{ string b=a.substr(j,i);
string c=revers(b);
bool flag=1;
for(int k=1;k<n;++k)
{ if(s[k].find(b)!=-1) continue;
if(s[k].find(c)!=-1) continue;
flag=0;
break;//有一个字符串不包含该子串有就跳出当前循环。
}
if(flag) return b.size();
}
return 0;
}
int main()
{ int Case;
cin>>Case;
while(Case--)
{ cin>>n;
for(int i=0;i!=n;++i)
cin>>s[i];
sort(s,s+n,cmp);
cout<<f(s[0])<<endl;
}return 0;
}
分享了作者在学习过程中遇到的心理纠结问题,详细介绍了如何通过排序、枚举等算法技巧来解决寻找所有字符串共有的最长串的长度问题,并提供了C++代码实现。文中还探讨了学习动力的激发和保持专注的方法。

被折叠的 条评论
为什么被折叠?



