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


### 题目描述补充 题目:**字符大小写排序** 给定一个字符串,该字符串包含大小写英文字母及可能的其他字符(如数字、符号等)。要求编写一个函数,能够按照字母的先后顺序(先小写后大写,小写字母a-z,大写字母A-Z)对字符串中的英文字母进行排序,而其他非字母字符则保持它们原有的相对位置不变。 ### 示例 输入字符串:`Code123aBcDE` 输出字符串:`acdeBCDE123Code` 解释:字母`a, B, c, C, d, D, E`被重新排序为先小写后大写,其余字符`123`和`Code`保持原位置不变。 ### PHP 示例代码 ```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 示例代码 ```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 示例代码 ```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 ``` 码小课网站中有更多相关内容分享给大家学习,包括算法基础、数据结构、编程语言进阶等,欢迎大家访问学习。
推荐面试题