赞
踩
题目描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
首先找到a和b中最短的那个字符串。
这道题我觉得最巧妙的解法是利用了substr截取a中的字符串,每截取一部分就去b中查找,若在b中,就把最长的字符串保存起来。
另外需要注意的是find函数返回的是size_t类型的值,需要强转成int类型的。
具体代码如下:
- #include <iostream>
- #include <string>
- using namespace std;
- int main()
- {
- string a,b;
- while(cin>> a >> b)
- {
- string maxstr;
- if(a.size()>b.size())
- swap(a,b);
- for(int i=0;i<a.size();i++)
- {
- for(int j=i;j<a.size();j++)
- {
- string newstr=a.substr(i,j-i+1);
- if(int(b.find(newstr))<0)
- break;
- else if(newstr.size()>maxstr.size())
- maxstr=newstr;
- }
- }
- cout<<maxstr<<endl;
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。