生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法之KMP算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構與算法之KMP算法
目錄
KMP算法介紹輸入字符串str1,str2,返回字符串str2是否在str1中,在的話在第幾位開始
1. KMP算法介紹
在CSDN上看到一篇寫的很好的關于KMP的介紹,附上鏈接:https://www.cnblogs.com/SYCstudio/p/7194315.html
2. 輸入字符串str1,str2,返回字符串str2是否在str1中,在的話在第幾位開始
因為上面那篇博客說的很詳細了,我直接貼代碼
代碼實現
public class Code_01_KMP {public static int getIndexOf(String s
, String m
) {if (s
== null
|| m
== null
|| m
.length() < 1 || s
.length() < m
.length()) {return -1;}char[] str1
= s
.toCharArray();char[] str2
= m
.toCharArray();int i1
= 0;int i2
= 0;int[] next
= getNextArray(str2
);while (i1
< str1
.length
&& i2
< str2
.length
) {if (str1
[i1
] == str2
[i2
]) {i1
++;i2
++;} else if (next
[i2
] == -1) { i1
++;} else { i2
= next
[i2
];}}return i2
== str2
.length
? i1
- i2
: -1;}public static int[] getNextArray(char[] str2
) {if (str2
.length
== 1) {return new int[]{-1};}int[] next
= new int[str2
.length
];next
[0] = -1;next
[1] = 0;int cn
= 0;int i
= 2;while (i
< str2
.length
) {if (str2
[i
- 1] == str2
[cn
]) {next
[i
++] = ++cn
;} else if (cn
> 0) {cn
= next
[cn
];} else {next
[i
++] = 0;}}return next
;}public static void main(String
[] args
) {String str
= "abcabcababaccc";String match
= "ababa";System
.out
.println(getIndexOf(str
, match
));}}
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的数据结构与算法之KMP算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。