計算兩個字串最大公有子串

2022-02-16 00:56:26 字數 2838 閱讀 4946

body

body>*:first-child

body>*:last-child

p, blockquote, ul, ol, dl, table, pre

h1, h2, h3, h4, h5, h6

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code

h1 h2

h3 h4

h5 h6

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p

a a:hover

ul, ol

ul li>:first-child, ol li>:first-child, ul li ul:first-of-type, ol li ol:first-of-type, ul li ol:first-of-type, ol li ul:first-of-type

ul ul, ul ol, ol ol, ol ul

dl dl dt

dl dt:first-child

dl dt>:first-child

dl dt>:last-child

dl dd

dl dd>:first-child

dl dd>:last-child

pre, code, tt

code, tt

pre>code

pre

pre code, pre tt

kbd

blockquote

blockquote>:first-child

blockquote>:last-child

hr img 對演算法一直應用的比較少,最近看到一些典型的演算法想練練手,想看看到底有多麼讓人討厭。其實發現演算法都有一定的套路,一般並不是臨時憑空想出來的,大都建立在一些已經存在的經典演算法知識以及資料結構上。換句話來說,如果某些玩法之前未接觸過,那麼讓你在短時間內臨時想出來還是有一定難度的。這有點類似專案經驗,如果曾經做過乙個crm系統,下次再碰到它時你就輕鬆很多,如果你挑戰的是乙個你從未遇到過的系統,你只能憑已有知識去強吃。

這個也是經常遇到到,給出兩個任意長度的字串,輸出最大公有字串,比如輸入abcdef,cdef,則輸出cdef。

採用雙層迴圈,指標移動來記錄所有子串,最後取最大長度子串。利用臨時佇列來儲存迴圈過程中匹配成功的字元元素,從兩個字串首個元素開始匹配。

從元素0開始比較

字串a指標不動,b依次向後找至少找到相同的,將相同字元壓入臨時佇列中。

出現第乙個匹配元素

當出現匹配元素後,兩個字串均向後移動乙個元素再做比較。

匹配出現中斷

如果前面已經開始匹配成功,向後出現字元不相同時,終止。

重置索引,迴圈匹配

字串b指標向後移動,字串a的指標重置,遞迴上面的步驟。

下面的示例將所有子串均記錄下來,如果只想輸出最大子串需要改下邏輯,定義乙個最大子串,然後與迴圈計算的子串相比較,取兩者長度最大值即可。

string b=

"abcdeqwe"

;string a=

"cdeabrwqedeqwe"

;int lengtha=a.length();

int lengthb=b.length();

//標識是否開始匹配

boolean match=

false;

//迴圈中用於儲存相同字元的臨時佇列

queue tmpresult=

newarrayqueue();

//儲存所有子串

list result=

newarraylist<>();

for(int i=

0;itmpresult.add(a.charat(indexa));

if(indexa

1) }

else

}if(j==lengthb-

1||i==lengtha-

1) }

}}//取最大的子串

queue stringresult=

collections

.max(result, new

ordering()

});

指標移動在迴圈過程中不會產生多餘的臨時字串,如果是substring方案就需要考慮效率了。

如有其它更好的方案請分享給我

求兩個字串的最大公共子串

求兩個串中的第乙個最長子串。如 abractyeyt dgdsaeactyey 的最大子串為 actyet 有乙個演算法很巧妙 把字串1 長度m 橫排,串2 長度n 豎排,得到乙個m n的矩陣c,矩陣的每個元素的值如下,如果m i n j 則c j i 1,否則,c j i 0。然後找出矩陣中連續是...

求兩個字串的最大公共子串

求兩個字串的最大公共子串 演算法原理 lcs i,j 0 i 0 j 0 lcs i 1,j 1 i 0 b 0 str1 i str2 j 1 構造乙個str1.size str2.size 的矩陣vec 2 如果 str1 i str2 j 則vec i j vec i 1 j 1 1 lcs ...

找出兩個字串的最大公共子串

找出兩個字串的最大公共子串。如 abcdefg和abdefg的最大公共子串是defg 有人給出以下兩種思路 1.以兩個字串c1c2為行列構成矩陣a,相同a i j 為1 最大就是斜方向連續1最多的 另一建議 如果2個字串都很長 那個矩陣占用空間太大了啊,那個矩陣是一般來說是稀疏矩陣 考慮用稀疏矩陣的...