1.简介
  暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理。然而它最大的问题就是运行速度太慢,所以在很多场合下暴力字符串匹配算法并不是那么有用。我们需要一些更快的方法来完成模式匹配的工作,然而在此之前,我们还是回过头来再看一遍暴力法匹配,以便更好地理解其他子串匹配算法。
  如下图所示,在暴力字符串匹配里,我们将文本中的每一个字符和模式串的第一个字符进行比对。一旦我们找到了一个匹配,我们就将文本中下一个字符取出来和模式串的第二个字符进行比较。
Rabin-Karp字符串查找算法
  该算法运行速度慢的主要原因有二:一方面,我们需要对文本中的每个字符都进行比对;另一方面,即使我们发现模式串首字符和文本中的某个字符相匹配, 我们仍然需要对模式串中剩下的所有符号(字符)挨个进行比对,才知道它们是不是出现在接下来的文本中。那么,是否有别的方法可以用来判断文本是否包含模式串呢?

  暴力字符串匹配代码:

public class NaiveStringMatch {
    public static int Search(String pat, String txt) {
        int M = pat.length();
        int N = txt.length();

        for (int i = 0; i <= N - M; i++) {
            int j;
            for (j = 0; j < M; j++) {
                if (txt.charAt(i + j) != pat.charAt(j))
                    break;
            }
            if (j == M)
                return i;
        }
        return -1;
    }
    public static int canBackSearch(String pat, String txt) {
        int j, M = pat.length();
        int i, N = txt.length();

        for (i = 0, j = 0; i < N & j < M; i++) {
            if (txt.charAt(i) == pat.charAt(j))
                j++;
            else {
                i -= j;
                j = 0;
            }
        }
        if (j == M)
            return i - M;
        else
            return -1;
    }
}
View Code

相关文章:

  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2017-12-08
  • 2022-03-03
  • 2022-12-23
  • 2022-02-18
  • 2022-12-23
猜你喜欢
  • 2022-01-04
  • 2021-11-21
  • 2021-12-10
  • 2022-02-25
  • 2022-12-23
  • 2022-12-23
  • 2021-08-06
相关资源
相似解决方案