LeetCode 1370. 上升下降字符串

    技术2025-11-27  12

    目录结构

    1.题目

    2.题解


    1.题目

    给你一个字符串 s ,请你根据下面的算法重新构造字符串:

    从 s 中选出最小的字符,将它接在结果字符串的后面。从 s 剩余字符中选出最小的字符,且该字符比上一个添加的字符大,将它接在结果字符串后面。重复步骤 2,直到你没法从 s 中选择字符。从 s 中选出最大的字符,将它接在结果字符串的后面。从 s 剩余字符中选出最大的字符,且该字符比上一个添加的字符小,将它接在结果字符串后面。重复步骤 5 ,直到你没法从 s 中选择字符。重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。

    在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。

    请你返回将 s 中字符重新排序后的 结果字符串 。

    示例:

    输入:s = "aaaabbbbcccc" 输出:"abccbaabccba" 解释:第一轮的步骤 1,2,3 后,结果字符串为 result = "abc" 第一轮的步骤 4,5,6 后,结果字符串为 result = "abccba" 第一轮结束,现在 s = "aabbcc" ,我们再次回到步骤 1 第二轮的步骤 1,2,3 后,结果字符串为 result = "abccbaabc" 第二轮的步骤 4,5,6 后,结果字符串为 result = "abccbaabccba" 输入:s = "rat" 输出:"art" 解释:单词 "rat" 在上述算法重排序以后变成 "art" 输入:s = "leetcode" 输出:"cdelotee" 输入:s = "ggggggg" 输出:"ggggggg" 输入:s = "spo" 输出:"ops"

    提示:

    1 <= s.length <= 500s 只包含小写英文字母。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/increasing-decreasing-string 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    2.题解

    将字符串转为字符数组并升序排列,然后:

    顺序遍历,取不重复字符加入结果;逆序遍历,取不重复字符加入结果;重复1,2直至取完所有字符。 public class Solution1370 { public String sortString(String s) { char[] chars = s.toCharArray(); Arrays.sort(chars); StringBuilder result = new StringBuilder(); int len = chars.length, flag = 1, i = 0; int count = len; char tmp = '1'; while (count > 0) { if (i == len - 1) { tmp = '1'; flag = 0; } else if (i == 0) { tmp = '1'; flag = 1; } if (chars[i] != tmp && chars[i] != ' ') { count--; tmp = chars[i]; result.append(chars[i]); chars[i] = ' '; } if (flag == 1) { i++; } else { i--; } } return String.valueOf(result); } } 时间复杂度:空间复杂度:
    Processed: 0.021, SQL: 9