最长子序列 | 第十届蓝桥杯国赛C++C组

我们称一个字符串 SS 包含字符串 TT 是指 TT 是 SS 的一个子序列,即可以从字符串 SS 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 TT 完全一样。

给定两个字符串 SS 和 TT,请问 TT 中从第一个字符开始最长连续多少个字符被 SS 包含?

输入格式

输入两行,每行一个字符串。

第一行的字符串为 SS,第二行的字符串为 TT。

两个字符串均非空而且只包含大写英文字母。

输出格式

输出一个整数,表示答案。

数据范围

1≤|T|≤|S|≤10001≤|T|≤|S|≤1000

输入样例:
ABCDEABCD
AABZ
输出样例:
3
题解:

        直接用双指针一个一个遍历搜索即可。

代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<stack>
#include<vector>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<set>
using namespace std;
typedef long long int ll;
const int INF=1e16;

string s1,s2;

void solve(){
    cin >> s1 >> s2;
    int t1=0,t2=0;
    while(t1<s1.size() && t2<s2.size()){
        if(s1[t1]!=s2[t2]){
            t1++;
        }
        else{
            t2++;t1++;
        }
    }
    cout << t2;
}

int main(){
    solve();
}