String Shifting- 今日头条校招2016-09-28在线编程题

来源:互联网 发布:淘宝上架宝贝教程 手机 编辑:程序博客网 时间:2024/06/01 07:15

题目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






原创粉丝点击