//求最小操作次数即求字符串中两个相同字符之间的最小距离
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
来源:牛客网