题目1: String Shifting
题目描述:
我们规定对一个字符串的shift操作如下:
shift("ABCD",0)="ABCD"shift("ABCD",1)="BCDA"shift("ABCD",2)="CDAB"
换言之, 我们把最左侧的N个字符剪切下来, 按序附加到右侧.
给定一个长度为n的字符串, 规定最多可以进行n次循环shift操作。
如果shift(string, x) = string(0 <= x < n). 我们称其为一次匹配(match), 求shift过程中匹配的次数…
输入描述
输入仅包括一个输入的字符串, 字符串中仅有大小写字母
输出描述
输出仅包括一行, 即匹配的次数
样例输入:
byebyebye
样例输出:
3
hint:
30%的样例中输入字符串的长度<100,
100%的样例中输入字符串的长度<10^6
public class Main { public char[] reverse(char[] array, int b, int e) { char temp; for (; b < e; b++, e--) { temp = array[b]; array[b] = array[e]; array[e] = temp; } return array; }//reverse public String shift(String s, int k) { if (k == 0) { return s; } int n = s.length(); char[] array = s.toCharArray(); array = reverse(array, 0, n - k - 1); array = reverse(array, n - k, n - 1); array = reverse(array, 0, n - 1); return String.valueOf(array); }//shift public int match(String s) { int count = 0, n = s.length(); String s2 ; for (int i = 0; i <n; i++) { s2 = shift(s,i); System.out.println(i+","+s2); if (s.equals(s2)) { count++; } }//for return count; }//match public static void main(String[] args) { Main main = new Main(); String s = "byebyebye"; System.out.println(main.match(s)); }//main}//0,byebyebye//1,ebyebyeby//2,yebyebyeb//3,byebyebye//4,ebyebyeby//5,yebyebyeb//6,byebyebye//7,ebyebyeby//8,yebyebyeb//3