前言:
开始水做练习题了,反正难度还是比较大的QAQ。比较dp。emmmmmmmmmmmmmmmmmmm
题目
大概就是给出两个字符串,蓝后让你求出他们相同的一串(but可以不连续 不连续还叫子串?)的长度。
输入
abcfbc
abfcab
输出
4
解题思路(不存在的思路)
看了看题目,不禁陷入沉思这道题有点水了。我们用f[i][j]来表示第一串前i个和第二串前j个的最大值。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s1[501],s2[501];
int n,m,f[501][501];
int main()
{scanf("%s %s",s1,s2);//输入n=strlen(s1);//求长度m=strlen(s2);//求长度×2 get√for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){f[i][j]=max(f[i-1][j],f[i][j-1]);//继承前面的最大值if (s1[i-1]==s2[j-1]) f[i][j]=max(f[i-1][j-1]+1,f[i][j]);//如果这次是相同,就用上一个+1}printf("%d",f[n][m]);//输出
}