例如:
001
从第一位后面切,分成0和01,两段同时翻转得到0和10,拼接为010;
最大相间子串长度为3。
分析:
把字符串收尾相接成环形,这样无论切多少次,翻转拼接,字符串在圆环上的相对位置不会变化。
所以可以求出没有切分之前字符串所有相间子串的长度,放到一个集合Len中,然后判断字符串首尾的字符是否一致,如果不一致则将集合Len中第一个数加上最后一个数。
Java代码实现如下:
public static int get2(String str) {
byte[] b = str.getBytes();
ArrayList<Integer> num = new ArrayList<>();
int k = 1;
int max = 0;
for (int i = 0; i < b.length-1; i++) {
if (b[i] != b[i + 1]) {
k++;
} else {
num.add(k);
if (k > max) {
max = k;
}
k = 1;
}
}
if (b[b.length - 1] != b[b.length-2 ]) {
num.add(k);
if (k > max) {
max = k;
}
k = 1;
}
if (num.size() > 1 && b[0] != b[b.length - 1]) {
if (b[b.length - 1] != b[b.length - 2]) {
max=Math.max(max, num.get(0)+num.get(num.size()-1));
}else{
max=Math.max(max, num.get(0)+1);
}
}
return max;
}