题目描述:
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!
本题含有多组输入数据!
输入描述:
输入两个字符串
输出描述:
返回重复出现的字符
示例:
输入:
abcdefghijklmnop
abcsafjklmnopqrstuvw
输出:
jklmnop
解题思路:
本题是字符串操作题。输入两个字符串,先判断长短;再从短串开始,先分析短串是否在长串中,若有,则返回;若无,则短串长度-1,即分析短串的两个子串是否在,同理直到找到某个子串符合要求,该子串肯定是符合要求的子串中最长的且最先出现;最后如果两个字符串连字母都没有交集,则返回空串。
测试代码:
#include <iostream> #include <string> using namespace std; string getresult(string s1,string s2) { int lsize=s1.size(); int ssize=s2.size(); string result; for(int i=ssize;i>=1;--i) { for(int j=0;j<(ssize-i+1);++j) { string temp=s2.substr(j,i); int id=s1.find(temp); if(id!=string::npos) { return temp; } } } return ""; } int main() { string s1,s2; while(cin>>s1>>s2) { string Long,Short; if(s1.size()>s2.size()) { Long=s1; Short=s2; } else{ Long=s2; Short=s1; } cout<<getresult(Long,Short)<<endl; } return 0; }