//求最小操作次数即求字符串中两个相同字符之间的最小距离
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T=in.nextInt(),i=0;
        while(i<T&&in.hasNext()){
            int n=in.nextInt();
            String s=in.next();
            System.out.println(F(s,n));
            i++;     
        }  
    }
    private static int F(String s,int n){
        int min=n;   //距离最小值,实时更新,初始为n
        for(int i=0;i<n;i++){     //循环遍历每个字符
            int j=(i+1)%n,count=0;
            while(s.charAt(i)!=s.charAt(j)&&count<=n){//往后寻找相同的字符
                count++;                     //记录距离
                j=(j+1)%n;                   //取模回到字符串头部往后寻找
            }
            min=Math.min(min,count);         //更新距离最小值
            if(min==0)                       //0已为最小距离 出现两个挨着的不同字符,可直接断开,跳出循环
            break;
        }
        if(min==n-1)//若最小值为n-1表示字符串中没有相同字符,不能断开,返回-1
        return-1;
        return min; //否则返回相同字符之间的最小距离,即最少操作次数  
    }
}

作者:牛客505100029号
链接:https://www.nowcoder.com/discuss/731281929445679104?sourceSSR=users
来源:牛客网