字符匹配-暴力法

  • Post author:
  • Post category:其他


public class ViolenceMatch {

    public static void main(String[] args) {
        String str1 = "BBC ABCDAB ABCDABCDABDE";
        String str2 = "ABCDABD";
        int index = strMatch(str1, str2);
        System.out.println("index = " + index);
    }

    /**
     * 暴力法求解str2在str1中的匹配位置
     */
    public static int strMatch(String str1, String str2) {
        char[] s1 = str1.toCharArray();
        char[] s2 = str2.toCharArray();

        int s1Len = s1.length;  //字符串str1的长度
        int s2Len = s2.length;  //字符串str2的长度

        int i = 0;  //相当于字符串str1的索引,指向当前试图匹配的字符的下标
        int j = 0;  //相当于字符串str2的索引

        while (i < s1Len && j < s2Len) {
            if(s1[i] == s2[j]) {    //当前字符匹配成功
                i++;
                j++;
            } else {    //匹配失败
                i = i - j + 1;  //前面已经匹配上了j个字符,i-j相当与回到了匹配上第一个字符时i的位置,再加一表示当前位置匹配失败从下一个位置重新开始匹配
                j = 0;
            }
        }

        if(j == s2Len) {    //如果匹配成功,返回匹配成功的位置
            return i - j;
        } else {
            return -1;
        }

    }

}

在这里插入图片描述



版权声明:本文为ytc958374686原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。