字符串匹配-kmp算法

问题: 有字符串a、b, 求字符串a是否包含字符串b,如果包含, 返回起始位置。

解法1. 暴力破解。

从a的第一个字符起,移动n(n为b的长度), 判断a和b相应位置的字符是否匹配, 如不匹配则从a的第2位起,重复前述过程, 直至完全匹配上,或移动至a结尾(ps: 不用移动至a结尾, 移动到m-n位即可, m是a的长度)。

 1 public static int contains(String a, String b) {
 2         if(a.equals(null) || b.equals(null)) {
 3             return -1;
 4         }
 5         if(a.length() < b.length()) {
 6             return -1;
 7         }
 8         int i = 0, j =0;
 9         while(i<=a.length() - b.length() && j<b.length()) {
10             if(a.charAt(i+j) == b.charAt(j)) {
11                 j++;
12             }else {
13                 j = 0;
14                 i++;
15             }
16         }
17         if(j==b.length()) {
18             return i;
19         }
20         return -1;    
21     }
View Code

猜你喜欢

转载自www.cnblogs.com/lowseasonwind/p/9250209.html