小U的字符串变换挑战

89 阅读1分钟

问题描述

小U有一个长度为 n 的字符串 S,她可以执行以下操作:选择字符串中的一个索引 i,并将 S[i] 这个字符按照字母表的顺序循环右移一位。例如:'a' 右移一位变为 'b',而 'z' 右移一位变为 'a'

小U想知道,最少需要多少次操作才能使得字符串 S 中任意两个相邻的字符都不相同。


测试样例

样例1:

输入:n = 3,S = "aaa"
输出:1

样例2:

输入:n = 4,S = "abab"
输出:0

样例3:

输入:n = 5,S = "aabba"
输出:2

按照他的题意,我们顺序遍历一遍和逆序遍历一遍的得到的结果取最小的哪一个就可以。

public class Main {
  public static int solution(int n, String S) {

        int i,resl=0,resr=0;
        int[] arr=new int[n],left=new int[n],right=new int[n];
        //初始化数组
        for(i=0;i<n;i++){
            arr[i]=S.charAt(i)-'a';
            left[i]=arr[i];
            right[i]=arr[i];
        }

        for(i=1;i<n;i++){
            if(left[i]==left[i-1]){
                left[i]=(left[i]+1)%26;
                resl++;
            }
        }
        for(i=n-2;i>-1;i--){
            if(right[i]==right[i+1]){
                right[i]=(right[i]+1)%26;
                resr++;
            }
        }

        int res=Math.min(resl,resr);
        System.out.println(res);
        return res;
    }

    public static void main(String[] args) {
        System.out.println(solution(3, "aaa") == 1);
        System.out.println(solution(4, "abab") == 0);
        System.out.println(solution(5, "aabba") == 2);
    }
}