文章
10
粉丝
399
获赞
59
访问
104.1k
最开始看成了序列,搞了半天没通过。
这里我用了两个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++)
- ...
登录后发布评论
暂无评论,来抢沙发