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


    题目描述

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

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

  • 相关阅读:
    如何在Docker容器中安装RabbitMQ
    电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备?
    【小沐学Python】Python实现在线电子书(MkDocs + readthedocs + github + Markdown)
    831.KMP字符串
    open-webui与ollama的部署最后完整之命令
    Constitutional AI
    浅谈软件危机
    Science经典:植物基因组的同线性与共线性分析思路
    华大单片机KEIL添加ST-LINK解决方法
    迅为RK3568开发Android12系统烧写 Android 固件
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126151084