亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript實現求最大公共子串的方法

2019-11-19 14:25:23
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript實現求最大公共子串的方法。分享給大家供大家參考,具體如下:

求最大公共子串,常見的做法是使用矩陣。假設有字符串:abcdefg和字符串abcd,則可構成如下表所示矩陣。

a b c d e f g
a 1 0 0 0 0 0 0
b 0 1 0 0 0 0 0
c 0 0 1 0 0 0 0
d 0 0 0 1 0 0 0

對兩個字符串的每一項都進行比較,若匹配則該項為1,不匹配則為0。然后求出對角線最長為1的那一段序列,即為最大公共子串??瓷厦娴姆珠_,似乎得使用二維數組了,在兩個字符串都較大的情況下不是很劃算,是否可以進一步優化?

可以,需要改變一下策略,如果該項匹配,則該項的值為再設為1,而是其對角線a[i-1, j-1](i > 1 && j > 1)的值+1,這樣便可以只使用一個一維數組。

以一個字符串作為“行”,另一個作為“列”,比較兩個字符串各項的值,用另外一個變量記錄數組的最大值和字符串的起始位置。代碼如下:

function LCS(str1, str2) { if (str1 === "" || str2 === "") {  return ""; } var len1 = str1.length; var len2 = str2.length; var a = new Array(len1); var maxLen = 0; var maxPos = 0; for (var i = 0; i < len1; i++) { //行  for (var j = len2 - 1; j >= 0; j--) {//列   if (str1.charAt(j) == str2.charAt(i)) {    if (i === 0 || j === 0) {     a[j] = 1;    } else {     a[j] = a[j - 1] + 1;    }   } else {    a[j] = 0;   }   if (a[j] > maxLen) {    maxLen = a[j];    maxPos = j;   }  } } return str1.substr(maxPos - maxLen + 1, maxLen);}

但代碼其實并不是最優的,為什么?因為上面的寫法必須等待兩層循環都完成。有沒有相對更快一些的方法呢?

設有字符串a、b,其長度分別為len1、len2,其公共字子串一定是 <= Math.min(len1, len2),而且子串必定連續,且一定是a、b的子串。

function findMaxSubStr(s1,s2){ var str= "",  L1=s1.length,  L2=s2.length; if (L1>L2){  var s3=s1;  s1=s2;  s2=s3;  s3 = null;  L1=s2.length;  L2 = s1.length; } for (var i=L1; i > 0; i--) {  for (var j= 0; j <= L2 - i && j < L1; j++){   str = s1.substr(j, i);   if (s2.indexOf(str) >= 0) {    return str;   }  } } return "";}

先比較s1、s2的長度,然后取較短的字符串作為。substr(idex, len),所以拿較短的串取其子串,然后判斷它是否在較長的字符串中存在,如果存中則直接返回,否則再取下一位。

完整示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>www.49028c.com</title> <style type='text/css'> body {background-color:#fff;} </style> </head> <body><script type='text/javascript'>function LCS(str1, str2) { if (str1 === "" || str2 === "") { return ""; } var len1 = str1.length; var len2 = str2.length; var a = new Array(len1); var maxLen = 0; var maxPos = 0; for (var i = 0; i < len1; i++) { //行 for (var j = len2 - 1; j >= 0; j--) {//列 if (str1.charAt(j) == str2.charAt(i)) { if (i === 0 || j === 0) {  a[j] = 1; } else {  a[j] = a[j - 1] + 1; } } else { a[j] = 0; } if (a[j] > maxLen) { maxLen = a[j]; maxPos = j; } } } return str1.substr(maxPos - maxLen + 1, maxLen);}function findMaxSubStr(s1,s2){ var str= "", L1=s1.length, L2=s2.length; if (L1>L2) { var s3=s1; s1=s2; s2=s3; s3 = null; L1=s2.length; L2 = s1.length; } for (var i=L1; i > 0; i--) { for (var j= 0; j <= L2 - i && j < L1; j++){   str = s1.substr(j, i);   if (s2.indexOf(str) >= 0) { return str;  }  } } return "";} !(function() { var tmpArr = []; for (var i = 97; i < 97 + 26; i++) { tmpArr.push(String.fromCharCode(i)); } var s2 = tmpArr.join(""); tmpArr.sort(function() {return Math.random() > 0.7;}); var s1 = new Array(600).join(tmpArr.join("")); var date = getNow(); alert( "消耗時間:" + (getNow() - date) + "秒 " + LCS(s1, s2)); date = getNow(); alert( "消耗時間:" + (getNow() - date) + "秒 " + findMaxSubStr(s1, s2) ); })();function getNow() { return new Date().getTime();}</script> </body></html>

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript數組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人羞羞国产免费| 亚洲美女av在线| 亚洲国产又黄又爽女人高潮的| 久久亚洲一区二区三区四区五区高| 国产精品久久久久久久久男| 欧美极品美女视频网站在线观看免费| 亚洲午夜国产成人av电影男同| 成人疯狂猛交xxx| 日韩亚洲综合在线| 色播久久人人爽人人爽人人片视av| 久久久久久久久久久网站| 国产精品午夜国产小视频| 欧美日韩在线影院| 成人黄色大片在线免费观看| 国产伦精品一区二区三区精品视频| 国产亚洲精品成人av久久ww| 视频直播国产精品| 日韩精品日韩在线观看| 欧美日韩电影在线观看| 亚洲欧美精品在线| 亚洲国产日韩精品在线| 欧美激情一区二区三区成人| 久久久www成人免费精品| 久久精品久久久久电影| 国产一区视频在线播放| 性色av一区二区三区| 色婷婷综合久久久久中文字幕1| 久久国产精品免费视频| 国产有码一区二区| 久久香蕉国产线看观看av| 国产视频精品在线| 疯狂做受xxxx高潮欧美日本| 日韩av中文字幕在线播放| 日本精品一区二区三区在线播放视频| 成人免费网视频| 精品毛片网大全| 91视频免费网站| 亚洲一区二区三区sesese| 亚洲欧洲中文天堂| 日韩av中文字幕在线播放| 亚洲精品少妇网址| 亚洲福利在线观看| 亚洲精品久久久久久久久久久| 亚洲精品自拍偷拍| 欧美人成在线视频| 国产区精品在线观看| 68精品国产免费久久久久久婷婷| 91精品在线国产| 日韩高清免费在线| 国产一区深夜福利| 久久视频国产精品免费视频在线| 国内精品视频久久| 操日韩av在线电影| 91精品啪在线观看麻豆免费| 91大神在线播放精品| 88xx成人精品| 欧美日韩国产91| 欧美视频免费在线| 亚洲a级在线观看| 亚洲精品久久久久久久久久久久| 4p变态网欧美系列| 亚洲国产成人精品久久| 国产日韩欧美日韩大片| 日韩在线观看免费全集电视剧网站| 欧美精品videos性欧美| 日韩欧美亚洲综合| 国产精品女主播视频| 久久精品视频亚洲| 欧美视频第一页| 日韩资源在线观看| 亚洲已满18点击进入在线看片| 亚洲综合成人婷婷小说| 欧美专区在线观看| 亚洲精品成人久久| 久久九九全国免费精品观看| 国内精品久久久久影院优| 一区二区在线免费视频| 亚洲国产精品久久| 亚洲最新av在线| 日本亚洲精品在线观看| 久久久av亚洲男天堂| 国产精品盗摄久久久| 久久免费观看视频| 精品一区二区亚洲| 国产精品久久久久久亚洲影视| 国产精品视频白浆免费视频| 国产精品久久久久久久av电影| 欧美中文字幕在线| 性色av一区二区三区红粉影视| 九九热99久久久国产盗摄| 操日韩av在线电影| 91免费人成网站在线观看18| 久久久久久久网站| 亚洲综合中文字幕68页| 亚洲第一男人av| 欧美资源在线观看| 国产欧美日韩最新| 亚洲性猛交xxxxwww| 日韩欧中文字幕| 国产一区二区三区网站| 亚洲女人被黑人巨大进入| 国产一区视频在线| 国产精品黄页免费高清在线观看| 亚洲精品美女久久| 日本高清久久天堂| 国产做受69高潮| 一区二区三区www| 国产精品丝袜白浆摸在线| 欧美激情奇米色| 色小说视频一区| 亚洲第五色综合网| 亚洲欧美国产日韩天堂区| 九九综合九九综合| 亚洲成人av在线| 国产精品亚洲第一区| 亚洲的天堂在线中文字幕| 91精品在线影院| 国产精品美女www| 国产亚洲欧美日韩精品| 日韩av在线看| 亚洲国产精品热久久| 日本电影亚洲天堂| 在线亚洲欧美视频| 日韩成人激情影院| 国产一区二区三区在线免费观看| 日本乱人伦a精品| 国产亚洲精品久久久| 欧洲精品毛片网站| 久久的精品视频| 九九热精品在线| 日本成人黄色片| 久久久精品2019中文字幕神马| 亚洲天堂第一页| 久久久精品久久久| 成人免费淫片视频软件| 3344国产精品免费看| 在线电影av不卡网址| 亚洲精品久久久一区二区三区| 欧美日韩视频免费播放| 国产精品视频中文字幕91| 成人免费观看49www在线观看| 在线视频免费一区二区| 国产小视频国产精品| 欧美电影在线观看| 亚洲四色影视在线观看| 欧美在线免费看| 欧美性色视频在线| 少妇高潮久久久久久潘金莲| 人人做人人澡人人爽欧美| 亚洲一区二区三区四区在线播放| 国产69精品久久久久久| 欧美理论电影在线观看| 欧美性猛交xxxx久久久| 精品女同一区二区三区在线播放| 亚洲精品视频播放| 国产伦精品免费视频| 在线色欧美三级视频| 亚洲欧美国产精品| 亚洲网址你懂得| 国产亚洲一级高清| 中文字幕亚洲一区二区三区五十路| 亚洲精品国产精品国自产观看浪潮| 91麻豆国产语对白在线观看| 91成人福利在线|