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


    题目描述

    给定一个字符串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时只需要对原来的字符串做排序就可以了。

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

  • 相关阅读:
    连表查询数据,将数据分组串联到一起
    【目标检测论文解读复现NO.34】基于改进 YOLOv5s 的苹果叶片小目标病害轻量化检测方法
    【云原生 | Kubernetes 系列】--Gitops持续交付 ArgoCD 部署与概念
    spring boot 面试题
    蓝/绿部署 VS 金丝雀部署
    零基础学python之列表
    IDE工具(48) idea常用插件
    Linux应用开发 - 读写锁
    [附源码]Python计算机毕业设计Django校园运动会管理系统
    QT 使用mysql
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126151084