917. 仅仅反转字母

题目

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s

示例1:

1
2
输入:s = "ab-cd"
输出:"dc-ba"

示例2:

1
2
输入:s = "a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"

示例3:

1
2
输入:s = "Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"

提示:

  • 1 <= s.length <= 100
  • s 仅由 ASCII 值在范围 [33, 122] 的字符组成
  • s 不含 '\"''\\'

解法

解法一:

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public String reverseOnlyLetters(String s) {
char[] chars = s.toCharArray();
int sIndex = 0, eIndex = chars.length - 1;
while (sIndex < eIndex) {
if (!Character.isLetter(chars[sIndex])) {
sIndex++;
}
if (!Character.isLetter(chars[eIndex])) {
eIndex--;
}
if (Character.isLetter(chars[sIndex]) &&
Character.isLetter(chars[eIndex])) {
char temp = chars[sIndex];
chars[sIndex] = chars[eIndex];
chars[eIndex] = temp;
sIndex++;
eIndex--;
}
}
return new String(chars);
}
0%