题目描述:输入一字符串,找出其中出现的相同且长度最长的字符串,输出该子串及其首字符的位置。
目前想到比较暴力的解法,把该字符串中所有可能的子串从最长的开始寻找。
int main()
{
string str,tmp_str;
cin >> str;
for (int i = str.length() - 1; i > 1; i--)
{
for (int j = 0; j < str.length();j++)
if (j + i <= str.length())
{
//cout << str.substr(j, i) << endl;//用来检验所划分的子串(从长到短)
int t1(0), t2(0);
tmp_str = str.substr(j, i);
t1 = str.find(tmp_str);//正序查找
t2 = str.rfind(tmp_str);//逆序查找
if (t1 != t2)//两次查找位置不一样,说明存在重复的子串
{
cout << "子串:" << tmp_str << "位置: " << t1 + 1 << endl;
system("pause");
return 0;
}
}
}
system("pause");
return 0;
}
{
string str,tmp_str;
cin >> str;
for (int i = str.length() - 1; i > 1; i--)
{
for (int j = 0; j < str.length();j++)
if (j + i <= str.length())
{
//cout << str.substr(j, i) << endl;//用来检验所划分的子串(从长到短)
int t1(0), t2(0);
tmp_str = str.substr(j, i);
t1 = str.find(tmp_str);//正序查找
t2 = str.rfind(tmp_str);//逆序查找
if (t1 != t2)//两次查找位置不一样,说明存在重复的子串
{
cout << "子串:" << tmp_str << "位置: " << t1 + 1 << endl;
system("pause");
return 0;
}
}
}
system("pause");
return 0;
}