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