题目地址:
https://leetcode.com/problems/increasing-decreasing-string/
给定一个字符串
s
s
s,只含英文小写字母,按照如下要求返回一个新的字符串:
1、先从
s
s
s中挑出最小的字母(并删除),append到答案里;
2、重复
1
1
1直到无法挑了为止;
3、再从
s
s
s中挑出最大的字母(并删除),append到答案里;
4、重复
3
3
3直到无法挑了为止;
5、重复上述操作直到
s
s
s被删光。
返回最终答案。
直接模拟上面的过程即可。先把 s s s中每个字母出现了多少次统计一下,然后开一个StringBuilder,先从小到大append,然后从大到小append。代码如下:
public class Solution {
public String sortString(String s) {
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
count[s.charAt(i) - 'a']++;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); ) {
for (int j = 0; j < count.length; j++) {
if (count[j] > 0) {
sb.append((char) ('a' + j));
count[j]--;
i++;
}
}
for (int j = count.length - 1; j >= 0; j--) {
if (count[j] > 0) {
sb.append((char) ('a' + j));
count[j]--;
i++;
}
}
}
return sb.toString();
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。