文章
10
粉丝
399
获赞
14
访问
100.8k
最开始看成了序列,搞了半天没通过。
这里我用了两个for循环,复杂度还是比较高
思路很简单,外层是第一个字符串一次遍历,内层是对第二个子串的循环。
这里有几个细节:
1.这里要求输出,对于子串倒是不难,长度容易求,记录首地址即可,对于子序列就比较麻烦,我想的是用一个二维数组来存储对应的dp[i][j]比较简单,
当然,这样空间复杂度比较高;
2.这里我没有采用动态规划,内层循环一开始如果用for循环也行,for(int j = 0;j< t.length();j++)这样在退出循环时,要更新j的值;
我用的while循环,感觉走偏了,值的更新改了很多次;
3.这个题相当于lcs的简化版,在不相等的地方,直接置0,背了lcs的模板的,应该很快就a了。
#include<iostream>
#include<string>
using namespace std;
int main(){
string s,t;
while(cin>>s>>t){
int fir = 0,len =0;
int ls = s.length();
int lt = t.length();
for(int i = 0;i<ls;i++){
int j = 0;
int k = 0;
while(i+k<ls){
if((s[i+k]>='0'&&s[i+k]<='9')||j==lt) break;
while(j<lt){
if(t[j]>='0'&&t[j]<='9'||s[i+k]!=t[j]){j++; break;}
else {j++;k++;}
}
if(k>len){len = k;fir = i;}
k=0;
}
}
for(int j = 0;j<len;j++)
...
登录后发布评论
暂无评论,来抢沙发