1 条题解
-
0
满分题解:
#include <bits/stdc++.h> using namespace std; int main() { string s, t; // 输入字符串 cin >> s >> t; int n = s.size(), m = t.size(); // 如果T为空或S为空,直接输出 if (m == 0) { cout << s << endl; return 0; } // 预处理T的next数组(KMP算法) vector<int> nxt(m, 0); for (int i = 1, j = 0; i < m; i++) { while (j > 0 && t[i] != t[j]) j = nxt[j - 1]; if (t[i] == t[j]) j++; nxt[i] = j; } // 使用栈结构存储字符和匹配长度 vector<char> st; // 字符栈 vector<int> mt; // 匹配长度栈 // 遍历S中的每个字符 for (char c : s) { // 将当前字符压入栈 st.push_back(c); // 计算当前匹配长度 int cur = 0; if (!mt.empty()) { cur = mt.back(); // 获取上一个匹配长度 } // KMP匹配过程 while (cur > 0 && c != t[cur]) { cur = nxt[cur - 1]; } if (c == t[cur]) { cur++; } // 将当前匹配长度压入栈 mt.push_back(cur); // 如果匹配长度等于T的长度,删除匹配成功的子串 if (cur == m) { // 弹出匹配成功的子串 for (int i = 0; i < m; i++) { st.pop_back(); mt.pop_back(); } } } // 输出最终结果 for (char c : st) { cout << c; } cout << endl; return 0; }
- 1
信息
- ID
- 926
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 11
- 已通过
- 3
- 上传者