0
点赞
收藏
分享

微信扫一扫

[2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)

颜路在路上 2024-09-20 阅读 16

这是字符串模式匹配经典算法。

#include<bits/stdc++.h>

using namespace std;

vector<int> KMP(string s) {
    int n = s.size();
    vector<int> ans(n, -1);
    int j = 0;
    for(int i = 1; i < n; i++) {
        j = ans[i - 1];
        while(j >= 0 && s[i] != s[j]) j = ans[j];
        if(j >= 0) ans[i] = j + 1;
    }

    return ans;
}

int main() {
    string s1;
    string s2;
    cout << "主串:";
    cin >> s1;
    cout << "子串:";
    cin >> s2;
    vector<int> pi = KMP(s2);

    int a = s1.size(), b = s2.size();
    int i = 0, j = 0;
    while(i < a && j < b) {
        if(j == -1) {
            i++;
            j++;
        }
        if(s1[i] == s2[j]) {
            i++;
            j++;
        } else j = pi[j];
    }
    if(j==b) cout << s1 << "是" << s2 << "的主串" << endl;
    return 0;
}
举报

相关推荐

0 条评论