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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM