华为练习--查找两个字符串a,b中的最长公共子串

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:24   2594   0


程序源代码:

#include <iostream>
#include <string>
using namespace std;

void findCommon(string a,string b);

int main()
{
 
 
 string a,b;
 getline(cin,a);
 getline(cin,b);
 string temp;
 if(a.length()<b.length())
 {
  temp=a;
  a=b;
  b=temp;
 } 
 findCommon(a,b); //a为长字符串,b为短字符串
 return 0;
}

void findCommon(string a,string b) //a为长字符串,b为短字符串
{
 unsigned int len_a=a.length(),len_b=b.length();//两字符串的长度
 unsigned int maxlen=0;//最长公共字符串的长度
 unsigned int maxindex=0; //最长公共字符串的最后一个字符的位置
 for(unsigned int i=b.length()-1;i>1;i--)
 {
  for(unsigned int j=0;j<=b.length()-i;j++)
  {
   string temp;
   int t=0;
   temp=b.substr(j,i);
   t=a.find(temp);
   if((t!=-1)&&(maxlen<temp.length()))//匹配成功,并进行比较
    {
     maxlen=temp.length();
     maxindex=i+j;
    }

  }
 }
 cout<<b.substr(maxindex-maxlen,maxlen)<<endl;
}
程序运行结果:



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP