#include <iostream> using namespace std; int main() { string str1,str2; cin>>str1>>str2; string s2; int cnt=0; //jingen int l3=str1.length(); int l4=str2.length(); if(l3>l4) { string s=str1; str1=str2; str2=s; } int l1=str1.length(); int l2=str2.length(); for(int i=0;i<=l1;i++) { for(int j=0;j<=l2;j++) { string s1; if(str1[i]==str2[j]) { int k=i,p=j; while(str1[k]==str2[p]&&k<l1&&p<l2) { s1+=str2[p]; k++,p++; } int r1=s1.length(); int r2=s2.length(); if(r1>r2) s2=s1; } } } cout<<s2; return 0; }
由题意可知此题寻找最长公共子串,且如果存在多个答案,输出在较短串中最先出现的那个。使更短的字符串为str1,另外一个为str2,两个for循环遍历两个字符串,若字符相同则往后看,s2更新最长的公共子串参与链接