解题思路
这是一个字符串排序问题,需要将字母和数字分开排序,并按特定顺序组合。
关键点:
- 区分字母和数字字符
- 分别对字母和数字进行排序
- 按要求组合排序结果(字母在前,数字在后)
算法步骤:
- 将输入字符串分成字母和数字两个列表
- 分别对两个列表进行排序
- 先输出排序后的字母,再输出排序后的数字
代码
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string sortString(string s) {
vector<char> letters;
vector<char> digits;
// 分离字母和数字
for (char c : s) {
if (isdigit(c)) {
digits.push_back(c);
} else {
letters.push_back(c);
}
}
// 排序
sort(letters.begin(), letters.end());
sort(digits.begin(), digits.end());
// 组合结果
string result;
for (char c : letters) {
result += c;
}
for (char c : digits) {
result += c;
}
return result;
}
};
int main() {
string s;
cin >> s;
Solution solution;
cout << solution.sortString(s) << endl;
return 0;
}
import java.util.*;
public class Main {
static class Solution {
public String sortString(String s) {
List<Character> letters = new ArrayList<>();
List<Character> digits = new ArrayList<>();
// 分离字母和数字
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
digits.add(c);
} else {
letters.add(c);
}
}
// 排序
Collections.sort(letters);
Collections.sort(digits);
// 组合结果
StringBuilder result = new StringBuilder();
for (char c : letters) {
result.append(c);
}
for (char c : digits) {
result.append(c);
}
return result.toString();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
Solution solution = new Solution();
System.out.println(solution.sortString(s));
sc.close();
}
}
class Solution:
def sort_string(self, s: str) -> str:
# 分离字母和数字
letters = [c for c in s if c.isalpha()]
digits = [c for c in s if c.isdigit()]
# 排序
letters.sort()
digits.sort()
# 组合结果
return ''.join(letters + digits)
# 读取输入
s = input().strip()
solution = Solution()
print(solution.sort_string(s))
算法及复杂度
- 算法:分离排序
- 时间复杂度:,其中 是字符串长度
- 空间复杂度:,需要存储分离后的字符