【题解】最长公共连续子串
最长公共连续子串
http://www.nowcoder.com/questionTerminal/276712b113c6456c8cf31c5073a4f9d7
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.
输出描述:
输出为一个整数,表示最长公共连续子串的长度。
示例1
输入
abcde
abgde
输出
2
设第一个字符串为a,第二个字符串为b,dp[i][j]表示a以i结尾的子串和b以j结尾的子串的最长公共连续子串的长度
则,如果a[i]==b[j],那么dp[i][j]=dp[i-1][j-1]+1
#include<iostream> using namespace std; int main() { string a,b; getline(cin,a); getline(cin,b); int lena = a.length(); int lenb = b.length(); int dp[100][100]; int ans = 0; for(int i = 0 ; i < lena ; i++) { for(int j = 0 ; j < lenb ; j++) { if(a[i]==b[j]) { if(i==0||j==0) { dp[i][j]=1; ans=max(dp[i][j],ans); } else{ dp[i][j]=dp[i-1][j-1]+1; ans=max(dp[i][j],ans); } } } } cout<<ans<<endl; return 0; }