当前位置:   article > 正文

查找两个字符串a,b中的最长公共子串。_查找两个字符串a,b中最长的公共子串

查找两个字符串a,b中最长的公共子串

题目描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。

首先找到a和b中最短的那个字符串。

这道题我觉得最巧妙的解法是利用了substr截取a中的字符串,每截取一部分就去b中查找,若在b中,就把最长的字符串保存起来。

另外需要注意的是find函数返回的是size_t类型的值,需要强转成int类型的。

具体代码如下:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string a,b;
  7. while(cin>> a >> b)
  8. {
  9. string maxstr;
  10. if(a.size()>b.size())
  11. swap(a,b);
  12. for(int i=0;i<a.size();i++)
  13. {
  14. for(int j=i;j<a.size();j++)
  15. {
  16. string newstr=a.substr(i,j-i+1);
  17. if(int(b.find(newstr))<0)
  18. break;
  19. else if(newstr.size()>maxstr.size())
  20. maxstr=newstr;
  21. }
  22. }
  23. cout<<maxstr<<endl;
  24. }
  25. return 0;
  26. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/987473
推荐阅读
相关标签
  

闽ICP备14008679号