欢迎访问宙启技术站
智能推送

使用Java函数实现字符串匹配算法

发布时间:2023-10-21 07:09:54

字符串匹配算法是一种用于在一段文本中查找指定模式的字符串的算法。常见的字符串匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。

下面是使用Java函数实现KMP算法的示例代码:

public class KMP {
   public static int kmp(String text, String pattern) {
      int n = text.length();
      int m = pattern.length();
      int[] lps = computeLPSArray(pattern);
   
      int i = 0; // text中的当前字符索引
      int j = 0; // pattern中的当前字符索引
      while (i < n) {
         if (text.charAt(i) == pattern.charAt(j)) {
            i++;
            j++;
         }
   
         if (j == m) {
            return i - j; // 匹配成功,返回匹配的起始索引
         }
   
         if (i < n && text.charAt(i) != pattern.charAt(j)) {
            if (j != 0) {
               j = lps[j - 1];
            } else {
               i++;
            }
         }
      }
   
      return -1; // 未找到匹配的子串
   }
   
   private static int[] computeLPSArray(String pattern) {
      int m = pattern.length();
      int[] lps = new int[m];
      int len = 0; // 最长前缀后缀匹配的长度
      int i = 1;
   
      while (i < m) {
         if (pattern.charAt(i) == pattern.charAt(len)) {
            len++;
            lps[i] = len;
            i++;
         } else {
            if (len != 0) {
               len = lps[len - 1];
            } else {
               lps[i] = 0;
               i++;
            }
         }
      }
   
      return lps;
   }
   
   public static void main(String[] args) {
      String text = "ABCABCDABABCDABCDABDE";
      String pattern = "ABCDABD";
   
      int index = kmp(text, pattern);
      if (index == -1) {
         System.out.println("No match found");
      } else {
         System.out.println("Match found at index " + index);
      }
   }
}

该示例代码中的kmp函数实现了KMP算法,它接受文本字符串和模式字符串作为输入,并返回匹配的起始索引。computeLPSArray函数用于计算模式字符串的最长前缀后缀匹配数组(即lps数组),该数组在KMP算法中起到了加速匹配过程的作用。

在示例的main函数中,我们使用了一个简单的例子对实现的KMP算法进行了测试。输入的文本字符串为"ABCABCDABABCDABCDABDE",模式字符串为"ABCDABD",输出为"Match found at index 11",表示在文本字符串中找到了匹配的子串,并返回其起始索引。

以上是使用Java函数实现字符串匹配算法KMP的示例代码。这是一种高效的字符串匹配算法,在处理大量文本数据时可以提供较快的匹配速度。