Problem description |
小明是个很优秀的同学,他除了特别公正外,他也很细心,当然老师肯定也知道,这不,老师又有事情找他帮忙了,老师每周都会给他一个字符串A,然后问小明“A字符串的循环移位产生的所有字符串中,字典序最小的是哪个”,于是小明屁颠屁颠的一个一个比对,但是长久下来,小明实在是受不了了,所以他想请你帮帮他。同样,你帮他解决,你就会多AC一个题目。 Hint: 如果A字符串为bcda,那么其所有的循环移位的新字符串有cdab,dabc,abcd,和他自己bcda一共四个,然后在这四个中,字典序最小的为abcd,那么输出这个字符串中的第一次字符在原字符串中的位置,为3,如果有多个结果,输出数字最小的。 |
Input |
输入有T组, 以后每组第一行有一个字符串S,长度<=5000000,都是小写字母。 |
Output |
对于每一个case,输出结果。 |
Sample Input |
4 bcda aaa a adab |
Sample Output |
3 0 0 2 |
Problem Source |
HUNNU Contest //i,j一开始指向第一和第二个字符,k代表i,j开始的字符串最长匹配的长度
例如 abcdabbcabdc 第一个a位置为0,第二个a位置为4,第三个位置为8 假设i=0,j=4的时候(这里我们只是假设的一个中间过程) l对应字符相等,k=1 那么i+k,j+k就是第二个位置,也相等,k=2,匹配长度为2 但是第三个 s[i+k]>s[j+k] 那么两者比较的字典序最小的是j所指的位置,j要保留,i肯定不是字典序最小的,所以i直接偏移到i+k的后面去 反之亦然 最后我们找i,j最小的即可
|
hunnu11544:小明的烦恼——找字符串
最新推荐文章于 2019-10-04 14:28:20 发布