给出2个字符串,输出2字符串的最长公共子串。
输入格式:
输入2个字符串,不可包含空格。
输出格式:
输出2个字符串的最长公共子串。若没有公共子串,则输出“NULL”
输入样例1:
abcding
sbcdiofng
输出样例1:
bcdi
输入样例2:
understanding
fw
输出样例2:
NULL
思路:
vector<vector<int>> dp(m+1,vector<int>(n+1));
cout<<str1.substr(index-length+1,length);
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1;//少了一个s
string str2;
cin>>str1>>str2;
int m=str1.size();
int n=str2.size();
vector<vector<int>> dp(m+1,vector<int>(n+1));
int index=0;
int length=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(str1[i]==str2[j])
{
dp[i+1][j+1]=dp[i][j]+1;
if(dp[i+1][j+1]>length)
{
index=i;
length=dp[i+1][j+1];
}
}
}
}
if(length==0)
{
cout<<"NULL";
}
else
{
//cout<<str1.substr(index-length+1,length);
for(int i=index-length+1;i<=index;i++)
cout<<str1[i];
}
return 0;
}
我写的错误的,不知道哪里有问题
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1;
string str2;
cin>>str1>>str2;
int n=str1.length();
int m=str2.length();
int index=0;
int max=0;
int dp[n+1][m+1];
for(int i=1;i<n+1;i++)
{
for(int j=1;j<m+1;j++)
{
if(str1[i-1]==str2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
if(dp[i][j]>max)
{
max=dp[i][j];
index=i-1;
}
}
}
}
if(max==0)
cout<<"NULL";
else
{
for(int i=index;i<=index+max-1;i++)
{
cout<<str1[i];
}
}
return 0;
}