2019牛客暑期多校训练营(第七场) String (字符串,暴力)

链接: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();
    }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值