解题思路

这是一个字符串排序问题,需要将字母和数字分开排序,并按特定顺序组合。

关键点:

  1. 区分字母和数字字符
  2. 分别对字母和数字进行排序
  3. 按要求组合排序结果(字母在前,数字在后)

算法步骤:

  1. 将输入字符串分成字母和数字两个列表
  2. 分别对两个列表进行排序
  3. 先输出排序后的字母,再输出排序后的数字

代码

#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))

算法及复杂度

  • 算法:分离排序
  • 时间复杂度:,其中 是字符串长度
  • 空间复杂度:,需要存储分离后的字符