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

以上是实现代码,打印结果

根据获得的子串列表,要做类似最长(连续相同字符的)子串等等都比较简单了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值