Leecode统计子串个数(java)

/**

  • 获取一个字符串在另一个字符串中出现的次数。判断str2在str1中出现的次数
    */
public class StringExer2 {
    public static void main(String[] args) {
        String str1 = "ab";
        String str2 = "abaaba";
        getCount(str1, str2);
        System.out.println("子串出现的次数为:" + count);

    }

    /*
     * 如果发现str2中有字符与str1中字符相等,则进入内层循环
     *  用str2中每一个字符去和str1的字符比较
     *      如果不相等,结束内层循环
     *      如果相等,判断当前子串索引是否与子串长度-1相等
     *          如相等,则子串已遍历完,count+=1
     *          如不等,则继续下一次内层循环
     *
     *
     */
    static int getCount(String str1, String str2) {

        str1 = "ab";
        str2 = "aabjkdaaaaafjksdabkjdfsdabj";
        //将字符串转换成字符数组
        char[] ch1 = str1.toCharArray();
        char[] ch2 = str2.toCharArray();

        int len1 = str1.length();
        int len2 = str2.length();
        int count = 0;//记录出现次数
        boolean loopFlag = true;//设置一个标识,用于判断是否找到匹配字符的开关
        for (int i = 0; i < len2; i++) {
            //用比较数组的首元素进行匹配,一旦匹配到相同的字符,开始后继的检测
            if (ch1[0] == ch2[i]) {
                for (int j = 0, k = i; j < len1; j++, k++) {
                    if (k != len2 && ch1[j] == ch2[k]) { // k != len2 是为了应对ab在aba中出现的这种状况
                        //比较完最后一个字符元素且相同,计数器+1
                        if (j == len1 - 1) {
                            count++;
                            i += len1 - 1;//用于跳过已在匹配的子字符串范围内的长度,-1是为了抵消循环的递增
                            loopFlag = false;
                        }
                    } else
                        break;//一旦发现对应位数不相等,退出检测
                }
            }
        }
        if (loopFlag) {
            System.out.println("没有匹配的字符串!");
        }
        return count;
    }
}
原文地址:https://www.cnblogs.com/wsilj/p/13548420.html