题解 | #MP3光标位置#
公共子串计算
http://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
#include<iostream>
using namespace std;
#include<string>
int main()
{
string s1,s2,sh,sl;
cin>>s1;
cin>>s2;
int len1=s1.length(),len2=s2.length(),lenl,lenh;
//sl为短字符串,sh为长字符串
if(len1>len2)
{
lenh=len1;
lenl=len2;
sh=s1;
sl=s2;
}
else{
lenh=len2;
lenl=len1;
sh=s2;
sl=s1;
}
int max1=0,max2=0,k,ii;
//分三次循环,第一层是短字符串遍历,第二层是长字符串遍历,第三层是while遍历重复的部分,max1为重复部分长度
//max2为最后的最长重复字符串长度
for(int i=0;i<lenl;i++)
{
for(int j=0;j<lenh;j++)
{
max1=0;
ii=i;
k=j;
while(1)
{
if(sl[ii]==sh[k])
{
k++;
ii++;
max1++;
}
else{
break;
}
if(ii>=lenl||k>=lenh)
{
break;
}
}
if(max1>max2)
{
max2=max1;
}
}
}
cout<<max2<<endl;
}