JAVA笔试算法题01:找"大串"
题目描述
给定一个字符串其中包含任意组连续字符,我们把超过3个连续相同字符的组合称作大串,请找出它们的起止位置。如:” 叽叽汪汪汪喵喵喵喵喳喳” 可分组为”叽叽”,”汪汪汪”,”喵喵喵喵”,”喳喳”,其中”汪汪汪”和”喵喵喵喵”为大串组。
import java.util.ArrayList;
import java.util.List;
public class test1 {
public static void main(String[] args) {
// 期望的输出为 [[2,4]]
System.out.println(run("这是啊啊啊呀"));
// 期望的输出为 [[2,4],[5,8]]
System.out.println(run("叽叽汪汪汪喵喵喵喵喳喳"));
// test
System.out.println(run("115999998888887565554555"));
}
/**
* 找出输入字符串中连续3个以上相同字符的起始和结束位置
* @param input 输入字符串
*/
private static List<List<Integer>> run(String input) {
char[] s = input.toCharArray();
List<List<Integer>> output = new ArrayList<>();
for (int i = 0; i < s.length; i++) {
List<Integer> l = new ArrayList<>();
for (int i1 = i; i1 < s.length; i1++) {
if (s[i] != s[i1]) {
if (i1 - i > 2) {
l.add(i);
l.add(i1 - 1);
System.out.print(input.substring(i,i1) + " ");
output.add(l);
i = i1 - 1;
}
break;
}
// 末尾情况
else if(s[i] == s[i1] && i1 == s.length-1 && i1 - i > 1){
l.add(i);
l.add(i1);
System.out.print(input.substring(i,i1+1));
output.add(l);
i = i1;
break;
}
}
}
System.out.println();
return output;
}
}