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 list = getSubs(str, 0);

list.stream().forEach(s -> System.err.println(s));

}

/**

* 统计连续相同字符的子串

* @param str

* @param idx

* @return

*/

public static List getSubs(String str, int idx) {

List 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现输入一个字符串,然后输出其最长的连续子串,可以通过以下步骤来实现: 首先,我们可以使用Java的Scanner类来从控制台接收用户输入的字符串。 然后,我们可以利用正则表达式来匹配字符串子串。可以使用Pattern和Matcher类来进行正则表达式的匹配操作。 接着,我们可以遍历整个字符串,使用正则表达式来匹配子串,并记录下最长的连续子串及其长度。 最后,我们将找到的最长的连续子串输出到控制台上。 在编写代码时,需要考虑处理字符串为空的情况,以及如何处理多个连续子串长度相等的情况。 以下是一个简单的示例代码实现: ```java import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个字符串: "); String input = scanner.nextLine(); Pattern pattern = Pattern.compile("\\d+"); // 匹配多个字 Matcher matcher = pattern.matcher(input); int maxLength = 0; String longestNumStr = ""; while (matcher.find()) { String numStr = matcher.group(); if (numStr.length() > maxLength) { maxLength = numStr.length(); longestNumStr = numStr; } } if (longestNumStr.equals("")) { System.out.println("字符串没有子串"); } else { System.out.println("最长的子串为: " + longestNumStr); } } } ``` 通过以上步骤和示例代码,我们可以实现输入一个字符串,然后输出其最长的连续子串的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值