1 Star 2 Fork 0

rlmnsk/算法与数据结构

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
autokmp.sublime-snippet 1.24 KB
一键复制 编辑 原始数据 按行查看 历史
rlmnsk 提交于 2023-02-05 08:15 . 修复bug
<snippet>
<content><![CDATA[
template<size_t siz>
class AutoKmp {
public:
std::vector<int> pre_same;
std::vector<std::array<int, siz>> f;
inline int get(char x) {
if (x <= '9') return x - '0' + 52;
if (x <= 'Z') return x - 'A' + 26;
return x - 'a';
}
// f[i][j] 表示在节点i,下一个要匹配j的话 需要去的节点
AutoKmp(std::string& s, int n = -1) {
if (n == -1) n = s.size();
pre_same = {0};
f.push_back(std::array<int, siz>{});
pre_same.reserve(n + 10);
f.reserve(n + 10);
f[0][get(s[0])] = 1;
for (int i = 1; i < s.size(); i++) {
add(s[i]);
}
};
void add(char x) {
int j = get(x);
f.emplace_back(std::array<int, siz>{});
pre_same.push_back(f[pre_same[f.size() - 2]][j]);
f.back() = f[pre_same[f.size() - 2]];
f.back()[j] = f.size();
}
void pop() {
pre_same.pop_back();
f.pop_back();
}
};
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<!-- <tabTrigger>hello</tabTrigger> -->
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->
</snippet>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/rlmnsk/algorithm-and-data-structure.git
git@gitee.com:rlmnsk/algorithm-and-data-structure.git
rlmnsk
algorithm-and-data-structure
算法与数据结构
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385