题目地址:
https://www.lintcode.com/problem/rearrange-a-string-with-integers/description
给定一个字符串 s s s,将其字母按字典序排好序放在前面,并且把所有 0 ∼ 9 0\sim 9 0∼9的数字加起来的和连到后面。返回新字符串。
对字母的排序可以使用计数排序的方式。代码如下:
public class Solution {
/**
* @param str: a string containing uppercase alphabets and integer digits
* @return: the alphabets in the order followed by the sum of digits
*/
public String rearrange(String str) {
// Write your code here
if (str.isEmpty()) {
return "";
}
int sum = 0;
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isLetter(ch)) {
count[ch - 'A']++;
} else {
sum += str.charAt(i) - '0';
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count.length; i++) {
for (int j = 0; j < count[i]; j++) {
sb.append((char) ('A' + i));
}
}
return sb.append(sum).toString();
}
}
时空复杂度 O ( l s ) O(l_s) O(ls)。