问题描述
小明是一个中学生,今天他刚刚学习了数列。他在纸上写了一个长度为 n
的正整数序列,a0,a1,…,an−1a0,a1,…,an−1。这个数列里面只有 1 和 0,我们将 1 和 0 没有重复跟随并且至少由 3 个数组成的数列的数列称之为「神奇数列」。比如 10101
是一个神奇数列,1011
不是一个神奇数列。他想知道这个序列里面最长的「神奇数列」是哪个,你可以帮帮他吗?
输入格式
- 一行连续的数
s
,只有0
和1
输出格式
- 一行数
输入样例
0101011101
输出样例
010101
数据范围
- 1<s.length≤5×1041<s.length≤5×104
代码
public class Main {
public static String solution(String inp) {
char[] arr = inp.toCharArray();
StringBuilder maxStringBuilder = new StringBuilder();
StringBuilder currentStringBuilder = new StringBuilder();
for (int i = 0; i < inp.length(); i++) {
if (currentStringBuilder.length() == 0 || arr[i] != currentStringBuilder.charAt(currentStringBuilder.length() - 1)) {
currentStringBuilder.append(arr[i]);
} else {
// 当发现重复时,检查当前序列长度,并重置currentStringBuilder
if (currentStringBuilder.length() > maxStringBuilder.length()) {
maxStringBuilder = new StringBuilder(currentStringBuilder);
}
currentStringBuilder = new StringBuilder(String.valueOf(arr[i]));
}
}
// 最后还需要检查一次,因为可能在字符串末尾有最长的序列
if (currentStringBuilder.length() > maxStringBuilder.length()) {
maxStringBuilder = new StringBuilder(currentStringBuilder);
}
if(maxStringBuilder.length()<3){
maxStringBuilder=new StringBuilder();
}
return maxStringBuilder.toString();
}
public static void main(String[] args) {
// Add your test cases here
System.out.println(solution("0101011101").equals("010101"));
}
}