一个字符串含有0和1,可以从中间切开,两段同时翻转然后拼接在一起,可以重复切任意次,问最大相间子串长度是多少

例如:
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;
    }

猜你喜欢

转载自blog.csdn.net/qq_39559604/article/details/82532831