首页 > 学院 > 开发设计 > 正文

华为机试在线训练-牛客网(30)查找两个字符串a,b中的最长公共子串

2019-11-08 02:14:14
字体:
来源:转载
供稿:网友

题目描述

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
输入描述:
输入两个字符串
输出描述:
返回重复出现的字符
输入例子:
abcdefghijklmnopabcsafjklmnopqrstuvw
输出例子:
jklmnop

暴力枚举,从最长的子串开始找,是的直接跳出输出,一定是最长而且第一个出現的公共子串。                

#include <iostream>using namespace std;int main(){	string str1,str2;	while(cin>>str1>>str2){		int size1=str1.size();		int size2=str2.size();		string maxSubstr;		if(size1<=size2){			for(int len=size1;len>0;len--){				for(int i=0;i<=size1-len;i++){					string subStr=str1.substr(i,len);					if(str2.find(subStr)!=string::npos){						maxSubstr=subStr;						goto MAXSTR;					}				}			}		}		else{			for(int len=size2;len>0;len--){				for(int i=0;i<=size2-len;i++){					string subStr=str2.substr(i,len);					if(str1.find(subStr)!=string::npos){						maxSubstr=subStr;						goto MAXSTR;					}				}			}		}MAXSTR:	cout<<maxSubstr<<endl;	}	return 0;}另外,这题是道经典的动态规划例题,先mark下,后面学习了再补DP解法。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表