源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

基于KMP算法JavaScript的实现方法分析

  • 时间:2022-12-13 00:46 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:基于KMP算法JavaScript的实现方法分析
算法的核心是部分匹配表和回退算法,部分匹配表的实现如下:
[u]复制代码[/u] 代码如下:
function kmpGetStrPartMatchValue(str) {     var prefix = [];     var suffix = [];     var partMatch = [];     for(var i=0,j=str.length;i<j;i++){         var newStr = str.substring(0,i+1);         if(newStr.length == 1){             partMatch[i] = 0;         } else {             for(var k=0;k<i;k++){                 prefix[k] = newStr.slice(0,k+1);                 suffix[k] = newStr.slice(-k-1);                 if(prefix[k] == suffix[k]){                     partMatch[i] = prefix[k].length;                 }             }             if(!partMatch[i]){                 partMatch[i] = 0;             }         }     }     prefix.length = 0;     suffix.length = 0;     return partMatch; } //demo var t="ABCDABD"; console.log(kmpGetStrPartMatchValue(t)); //output:[0,0,0,0,1,2,0]
回退算法实现如下:
[u]复制代码[/u] 代码如下:
function KMP(sourceStr,targetStr){     var partMatchValue = kmpGetStrPartMatchValue(targetStr);     var result = false;     for(var i=0,j=sourceStr.length;i<j;i++){         for(var m=0,n=targetStr.length;m<n;m++){             if(str.charAt(m) == sourceStr.charAt(i)){                 if(m == targetStr.length-1){                     result = true;                     break;                 } else {                     i++;                 }             } else {                 if(m>0 && partMatchValue[m-1] > 0){                     m = partMatchValue[m-1]-1;                 } else {                     break;                 }             }         }         if(result){             break;         }     }     return result; } var s = "BBC ABCDAB ABCDABCDABDE"; var t = "ABCDABD"; console.log(KMP(s,t)); //output: true
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部