链接:https://ac.nowcoder.com/acm/contest/887/A
来源:牛客网
题目描述
A string is perfect if it has the smallest lexicographical ordering among its cyclic rotations.
For example: “0101” is perfect as it is the smallest string among (“0101”, “1010”, “0101”, “1010”).
Given a 01 string, you need to split it into the least parts and all parts are perfect.
输入描述:
The first line of the input gives the number of test cases, T\ (T \leq 300)T (T≤300). test cases follow.
For each test case, the only line contains one non-empty 01 string. The length of string is not exceed 200.
输出描述:
For each test case, output one string separated by a space.
输入
4
0
0001
0010
111011110
输出
0
0001
001 0
111 01111 0
Solution
每次从当前字符串尽可能长的位置开始,判断该字符串是不是所有循环中字典序最小的,如果是,直接输出,并处理剩下字符串
Code
private static boolean isMin(String s) {
String foo = s;
//Find min
for (int i = 0; i < s.length(); ++i) {
String swap = s.substring(i) + s.substring(0, i);
if (swap.compareTo(foo) < 0)
foo = swap;
}
return s.equals(foo);
}
public static void main(String[] args) throws Exception {
int t;
for (t = nextInt(); t-- != 0; ) {
String s = next();
while (s.length() != 0) {
for (int i = s.length(); i > 0; --i) {
String foo = s.substring(0, i);
if (isMin(foo)) {
out.print(foo + " ");
s = s.substring(i);
break;
}
}
}
out.println();
}
out.flush();
}