思路:
本题要求得字符串循环同构所有字符串中所有字符串字典序最小的起始位置,拿例题来说,abc有bca、cab等同构字符串,在这些字符串中最小的就是abc,所以例题返回a的位置1。
总的要求是字符串的字典序要最小,所以我们首先就要找到开头最小的字符,如果两个字符相等,就要看这两个字符所组成的字符串到底哪个最小,同样的思路,挨个比较两个字符串后面对应位置的值,直到他们不相等。
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回与该字符串循环同构所有字符串中字典序最小的起始位置
* @param s string字符串 代表题意中的s
* @return int整型
*/
public int solve (String s) {
// write code here
//res是要返回的值以及第一个字符串当前位置,temp是第二个字符串,k是用来同步遍历两个字符串的变量
int res=0,temp=1,k=0;
while(res+k<s.length()&&temp+k<s.length()&&k<s.length()){//用res+k进行判断,防止越界
if(s.charAt(res)==s.charAt(temp)){
if(s.charAt(res+k)>s.charAt(temp+k)){
res=temp;//如果res字符串大了,就将temp赋值给res
temp++;
k=0;//k的值要归零
}else if(s.charAt(res+k)<s.charAt(temp+k)){
temp++;
k=0;
}else{
k++;
}
}else if(s.charAt(res)>s.charAt(temp)){
res=temp;
temp++;
}else{
temp++;
}
}
return res+1;
}
}