一、字符串查找
给定一段长度为N的文本和一个长度为M的模式(pattern)字符串,在文本中找到一个和该模式相符的子字符串;
二、暴力字符串查找
在文本中模式可能出现匹配的任何地方检察匹配是否存在;
三、代码
- /**
- * 暴力字符串查找
- *
- * @author pengcx
- *
- */
- public class Violence {
- public static void main(String[] args) {
- String txt = "adldgkclsldajdc";
- String pat = "gkc";
- System.out.println(Violence.search(pat, txt));
- System.out.println(Violence.searchother(pat, txt));
- }
- /**
- * 使用暴力字符串查找方式,在txt中查找和pat匹配的子字符串
- *
- * @param pat
- * 匹配的模板字符串
- * @param txt
- * 查找的字符串
- * @return 模板字符串第一次出现的位置
- */
- public static int search(String pat, String txt) {
- int M = pat.length();
- int N = txt.length();
- // 逐个位置匹配模式字符串
- for (int i = 0; i < N; i++) {
- int j;
- for (j = 0; j < M; j++) {
- if (txt.charAt(i + j) != pat.charAt(j)) {
- break;
- }
- }
- // 找到了匹配的字符串
- if (j == M) {
- return i;
- }
- }
- return N;
- }
- /**
- * 使用暴力字符串查找方式的另外一种实现
- *
- * @param pat
- * 匹配的模板字符串
- * @param txt
- * 查找的字符串
- * @return 模板字符串第一次出现的位置
- */
- public static int searchother(String pat, String txt) {
- int M = pat.length();
- int N = txt.length();
- int i;
- int j;
- // 逐个位置匹配模式字符串
- 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 N;
- }
- }
- }