模拟法,看着比较直观,可以和65题通用,先得出子序列的位置信息,然后输出长度

#include<bits/stdc++.h>

using namespace std;

int main(){
    string a,b;
    
    while(cin>>a>>b){
        int len1=0,len2=0,k,t;//k,t用来记录i和j
        if(a.size()>=b.size()){
            //从b开始遍历
            len1 = 0;
            k=0,t=-1;
            for(int i=0;i<b.size();i++){
                for(int j=i;j<b.size();j++){
                    int c=a.find(b.substr(i,j-i+1));
                    if(c>=0)//存在则更新
                        len2 = j-i+1;
                        if(len2>len1){
                            len1=len2;
                            k=i;
                            t=j;
                        }
                }
            }
            cout<<b.substr(k,t-k+1).size()<<endl;
        }
        else{
            //从a开始遍历
            len1 = 0;
            k=0,t=-1;
            for(int i=0;i<a.size();i++){
                for(int j=i;j<a.size();j++){
                    int c=b.find(a.substr(i,j-i+1));
                    //int d=b.rfind(a.substr(i,j-i+1));
                    if(c>=0)//存在则更新
                        len2 = j-i+1;
                        if(len2>len1){
                            len1=len2;
                            k=i;
                            t=j;
                        }
                }
            }
            cout<<a.substr(k,t-k+1).size()<<endl;
        }
    }
    return 0;
}