题目:
我的解法:
class Solution {
public String sortString(String s) {
// 创建一个数组记录每个字母的个数
int[] array = new int[26];
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
int d = c - 'a';
array[d]++;
}
StringBuilder sb = new StringBuilder();
// positive用来判断是正向遍历还是反向遍历
boolean positive = true;
// isEmpty用来判断是否还有字母剩余
boolean isEmpty = false;
while(!isEmpty){
// 正向遍历
if(positive){
for(int i=0; i<array.length; i++){
if(array[i]!=0){
sb.append((char)('a'+i));
array[i]--;
}
}
positive = false;
}else{
// 反向遍历
for(int i=array.length-1; i>=0; i--){
if(array[i]!=0){
sb.append((char)('a'+i));
array[i]--;
}
}
positive = true;
}
// 统计剩余字母
for(int a: array){
if(a > 0){
isEmpty = false;
break;
}
isEmpty = true;
}
}
return sb.toString();
}
}
官方题解:
class Solution {
public String sortString(String s) {
int[] num = new int[26];
for (int i = 0; i < s.length(); i++) {
num[s.charAt(i) - 'a']++;
}
StringBuffer ret = new StringBuffer();
while (ret.length() < s.length()) {
for (int i = 0; i < 26; i++) {
if (num[i] > 0) {
ret.append((char) (i + 'a'));
num[i]--;
}
}
for (int i = 25; i >= 0; i--) {
if (num[i] > 0) {
ret.append((char) (i + 'a'));
num[i]--;
}
}
}
return ret.toString();
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/increasing-decreasing-string/solution/shang-sheng-xia-jiang-zi-fu-chuan-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。