//求最小操作次数即求字符串中两个相同字符之间的最小距离 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; //否则返回相同字符之间的最小距离,即最少操作次数 } }