当前位置: 面试刷题>> 字符大小写排序 (经典算法题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
```
码小课网站中有更多相关内容分享给大家学习,包括算法基础、数据结构、编程语言进阶等,欢迎大家访问学习。