zoukankan      html  css  js  c++  java
  • Java 实现:统计一个字符串中连续的相同字符构成的子串

    Java 实现:统计一个字符串中连续相同字符构成的子串,

    例如字符串:010011000011100, 需要得到的子串为:00、11、0000、111、00

    以下的实现方法(JDK版本:8+),实现大致逻辑:

    1、首先通过一个递归函数根据下标获得连续相同字符的(单个)子串

    2、接下来,通过递归函数统计子串

    3、最后,输出

    若有更好的实现方法,可共同探讨。

        import java.util.*;
         
        public class TestString {
         
            public static void main(String... args) throws Exception {
         
                String str = "010011000011100";
                List<String> list = getSubs(str, 0);
                list.stream().forEach(s -> System.err.println(s));
            }
         
            /**
             * 统计连续相同字符的子串
             * @param str
             * @param idx
             * @return
             */
            public static List<String> getSubs(String str, int idx) {
                List<String> result = new ArrayList<>();
                if(str != null) {
                    int len = str.length();
                    if(len > 0) {
                        String sub = subStr(str, idx);
                        System.err.println("sub => " + sub);
                        int tLen = sub.length();
                        if(tLen > 1) {
                            result.add(sub);
                        }
                        if(idx < len - 1) {
                            int endIdx = idx + tLen;
                            if(endIdx < len - 1) {
                                result.addAll(getSubs(str, endIdx));
                            }
                        }
                    }
                }
                return result;
            }
         
            /**
             * 获取连续相同字符子串
             * @param str
             * @param idx
             * @return
             */
            public static String subStr(String str, int idx) {
                char c = str.charAt(idx);
                StringBuffer result = new StringBuffer();
                result.append(c);
                if(idx < str.length() -1) {
                    if(c == str.charAt(idx + 1)) {
                        result.append(subStr(str, idx + 1));
                    }
                }
                return result.toString();
            }
        }


  • 相关阅读:
    [原创]网页级在线性能测试网站介绍
    [原创]浅谈测试团队文化
    [原创]浅谈自动化测试中的金字塔模型理解
    [原创]如何在面试时选择合适的测试人员?
    [原创]浅谈怎么写周报
    [原创]Windows下调试工具介绍
    [原创]浅谈我对持续集成的理解
    [原创]IBM AppScan工具培训
    [原创]Jenkins持续集成工具介绍
    [原创]什么是信息安全资产管理?
  • 原文地址:https://www.cnblogs.com/interdrp/p/12664320.html
Copyright © 2011-2022 走看看