网站建设开票项目是什么意思中企动力科技股份有限公司网站
news/
2025/10/1 5:16:25/
文章来源:
网站建设开票项目是什么意思,中企动力科技股份有限公司网站,建站63年来第一次闭站?北京站辟谣,asp网站查看器一、算法思路#xff1a; KMP模式匹配算法让主串不发生没必要的回溯#xff0c;即主串的索引值只做递增操作。如果主串的索引值不发生回溯#xff0c;那么就需要子串索引值的回溯变化。 子串索引值要以一种怎样的形式就行变化呢#xff1f;子串索引值的变化方式只和子串自身…一、算法思路 KMP模式匹配算法让主串不发生没必要的回溯即主串的索引值只做递增操作。如果主串的索引值不发生回溯那么就需要子串索引值的回溯变化。 子串索引值要以一种怎样的形式就行变化呢子串索引值的变化方式只和子串自身有关系而且索引值的变化取决于当前字符之前的串的前后缀的相似度。 我们以next数组表示串的相似度。next数组的本质就是寻找子串中相同前后缀的长度以此来表达匹配过程中需要跳过的字符个数。即根据已经掌握的信息来避免重复运算。 二、参考链接
视频参考链接 三、算法代码
/* KMP字符串匹配算法 */
short kmpSearch(std::string mainStr, std::string subStr) {// 获取子串的next数组auto retValue -1;const std::vectorshort nextVec getStrNextVec(subStr);// 主串、子串的索引下标short mainIdx 0, subInx 0;while (mainIdx mainStr.length()) {if (mainStr.at(mainIdx) subStr.at(subInx)) {// 字符匹配索引继续往后偏移mainIdx 1;subInx 1;}else {// 字符不匹配if (0 subInx) {// 子串的第一个字符与主串的就不匹配直接偏移主串索引mainIdx 1;}else {// 根据next数组跳过子串前面的一些字符subInx nextVec.at(subInx - 1);}}if (subInx subStr.length()) {// 子串的索引值等于子串长度的时候那么就匹配成功了retValue mainIdx - subInx;}}return retValue;
}/* 获取字符串的next数组 */
std::vectorshort getStrNextVec(std::string subStr) {std::vectorshort nextVec(0);int suffixIdx 1; // 当前子串后缀对应的索引值int prefixLen 0; // 当前子串前缀对应的索引值也表示相同前后缀的最大长度while (suffixIdx subStr.length()) {if (subStr.at(prefixLen) subStr.at(suffixIdx)) {// 当前subIdx字符之前的子串具有相同的前后缀则前后缀长度增加prefixLen 1;nextVec.push_back(prefixLen);suffixIdx 1;}else {if (0 prefixLen) {// 上一个子串的相同前后缀长度为0nextVec.push_back(0);suffixIdx 1;}else {// 上一个子串的相同前后缀不为0跳过相似长度进行比较// 递推直至prefixLen 0;prefixLen nextVec.at(prefixLen - 1);}}}return nextVec;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923517.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!