题解 | #序列模式匹配#

序列模式匹配

https://www.nowcoder.com/practice/48eb5689ad094fe2a55b6d3d84e72efe

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int main()
{
    string text,pattern;
    while(cin >> text >> pattern) {
        int n = text.size(), m = pattern.size();
        vector<vector<int>> dp(n,vector(n,0));
        bool flag = false;
        for(int k = 0; k < n; k++) {
            for(int i = 0; i + k < n; i++) {
                if(text[i + k] == pattern[dp[i][max(i + k - 1, 0)]])
                    dp[i][i + k] = dp[i][max(i + k - 1, 0)] + 1;
                else
                    dp[i][i + k] = dp[i][max(i + k - 1, 0)];
                if(dp[i][i + k] >= m) {//确保k是最小的
                    flag = true;
                    cout << i << " " << i + k << endl;
                }
                if(flag) break;
            }
            if(flag) break;
        }
        if(!flag) cout << "-1 -1" << endl;
    }
    return 0;
}
#牛客创作赏金赛##23届找工作求助阵地#
全部评论

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务