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();
        }
    }


posted @ 2020-04-09 07:14  锐洋智能  阅读(2343)  评论(0编辑  收藏  举报