zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    惭愧无法面对的SQL ORDER BY
    JVM参数官方说明
    Java Unsafe 测试代码
    好记性不如烂笔头-Duration与Period中字母含义
    计算机组成原理中源码、反码、补码存在意义
    线程池参数、线程池扩容以及拒绝策略触发时机demo代码
    朴素贝叶斯法
    K近邻法与kd树
    EM算法
    熵、交叉熵、KL散度、JS散度
  • 原文地址:https://www.cnblogs.com/wsilj/p/13548420.html
Copyright © 2011-2022 走看看