当前位置: 面试刷题>> 字符大小写排序 (经典算法题500道)


题目描述补充

题目:字符大小写排序

给定一个字符串,该字符串包含大小写英文字母及可能的其他字符(如数字、符号等)。要求编写一个函数,能够按照字母的先后顺序(先小写后大写,小写字母a-z,大写字母A-Z)对字符串中的英文字母进行排序,而其他非字母字符则保持它们原有的相对位置不变。

示例

输入字符串:Code123aBcDE

输出字符串:acdeBCDE123Code

解释:字母a, B, c, C, d, D, E被重新排序为先小写后大写,其余字符123Code保持原位置不变。

PHP 示例代码

function sortLetters($str) {
    $result = '';
    $letters = '';
    
    // 分离字母和非字母字符
    for ($i = 0; $i < strlen($str); $i++) {
        if (ctype_alpha($str[$i])) {
            $letters .= $str[$i];
        } else {
            $result .= $str[$i];
        }
    }
    
    // 对字母进行排序
    $sortedLetters = str_split(strtolower($letters));
    sort($sortedLetters);
    
    // 重新插入大写字母到正确的位置
    $lowercasePos = 0;
    $uppercasePos = count($sortedLetters);
    for ($i = 0; $i < strlen($letters); $i++) {
        if (ctype_upper($letters[$i])) {
            $sortedLetters[--$uppercasePos] = strtoupper($sortedLetters[$lowercasePos]);
        } else {
            $sortedLetters[$lowercasePos++] = $sortedLetters[$lowercasePos];
        }
    }
    
    // 将排序后的字母与非字母字符合并
    return $result . implode('', $sortedLetters);
}

echo sortLetters("Code123aBcDE"); // 输出: acdeBCDE123Code

Python 示例代码

def sort_letters(s):
    letters = sorted([c for c in s if c.isalpha()], key=lambda x: (x.islower(), x))
    result = []
    i = 0
    for c in s:
        if c.isalpha():
            result.append(letters[i])
            i += 1
        else:
            result.append(c)
    return ''.join(result)

print(sort_letters("Code123aBcDE"))  # 输出: acdeBCDE123Code

JavaScript 示例代码

function sortLetters(str) {
    let letters = [];
    let nonLetters = [];
    
    // 分离字母和非字母字符
    for (let char of str) {
        if (/[a-zA-Z]/.test(char)) {
            letters.push(char);
        } else {
            nonLetters.push(char);
        }
    }
    
    // 对字母进行排序
    letters.sort((a, b) => (a.toLowerCase() === a ? 1 : 0) - (b.toLowerCase() === b ? 1 : 0) || a.localeCompare(b));
    
    // 合并排序后的字母和非字母字符
    return [...nonLetters, ...letters].join('');
}

console.log(sortLetters("Code123aBcDE")); // 输出: acdeBCDE123Code

码小课网站中有更多相关内容分享给大家学习,包括算法基础、数据结构、编程语言进阶等,欢迎大家访问学习。

推荐面试题