• 【字符串】有序队列 排序


    题目描述

    给定一个字符串s和一个整数k。你可以从s的前k个字母中选取一个,将它放到字符串的末尾。

    请返回执行上述步骤任意次数后,字典上最小的字符串。

    示例1:

    输入:s = "cba", k = 1
    输出:"acb"
    解释:
    在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。
    在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。

    解题思路 

    这道题只需要考虑2种情况:

    • case1:k等于1的情况,如果k等于1,则需要找到字符串重最小的字符,然后按照最小的字符做subString操作,最终获得所有的字符串,接着对字符串进行一次排序,取第一个字符串。按照上述思路,代码如下:
        char min = s.charAt(0);
        List list = new ArrayList<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            if (c < min) {
                min = c;
                list = new ArrayList<>();
                list.add(i);
            } else if (c == min) {
                list.add(i);
            }
        }
    
        List list1 = new ArrayList<>();
        for (Integer index : list) {
            list1.add(s.substring(index) + s.substring(0, index));
        }
        Collections.sort(list1);
        return list1.get(0);
    • case1:k大于1的情况,由于k大于1一定能获得一个按照字符顺序排列的字符串,所以只需要按照字符顺序排序,然后返回这个字符串,代码如下: 
    char[] array = s.toCharArray();
    Arrays.sort(array);
    return new String(array);

    代码实现 

    综合上述代码,给出实现代码:

    1. import java.util.ArrayList;
    2. import java.util.Arrays;
    3. import java.util.Collections;
    4. import java.util.List;
    5. class Solution {
    6. public String orderlyQueue(String s, int k) {
    7. if (k > 1) {
    8. char[] array = s.toCharArray();
    9. Arrays.sort(array);
    10. return new String(array);
    11. } else {
    12. char min = s.charAt(0);
    13. List list = new ArrayList<>();
    14. char[] chars = s.toCharArray();
    15. for (int i = 0; i < chars.length; i++) {
    16. char c = chars[i];
    17. if (c < min) {
    18. min = c;
    19. list = new ArrayList<>();
    20. list.add(i);
    21. } else if (c == min) {
    22. list.add(i);
    23. }
    24. }
    25. List list1 = new ArrayList<>();
    26. for (Integer index : list) {
    27. list1.add(s.substring(index) + s.substring(0, index));
    28. }
    29. Collections.sort(list1);
    30. return list1.get(0);
    31. }
    32. }
    33. }

    总结

    这道题不是很复杂,主要在考虑清楚如何获取字典上最小的字符串。通过分析,能发现k=1时需要做字符串排序操作,当k>1时只需要对原来的字符串做排序就可以了。

    通过上述代码能比较快速的解决上述问题,期望有更加高效的方案给出来,欢迎回复。

  • 相关阅读:
    CVPR2022Oral专题系列(三):图像增强主干网络MAXIM
    HCIA网络课程第八周作业
    【饭谈】测试行业找工作最看重什么?
    mysql 中 varchar 和 text 的区别
    JAVA反编译工具-CFR(class单个反编译、JAR包整体反编译)
    春播秋收 “羊”鸣德州 一场“苏尼特羊”跨越千里的美丽邂逅
    Ubuntu升级自带的Python3版本
    ubuntu 软件包管理之一
    英语——分享篇——每日200词——1001-1200
    leetcode做题笔记127. 单词接龙
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126151084