通过万岁!!!
- 题目:给你一个字符串,里面由字母和其他字符组成,然后我们对字母进行反转。注意,我们只反转字母,例如a-bC-dEf-ghIj,转换为j-Ih-gfE-dCba。
- 思路:双指针,遍历字符串,然后左指针和右指针都是字符的时候,就交换一下。
- 技巧:
- 左右指针遍历。
伪代码
首先将字符串转成字符数组
然后定义左右指针,以及一个临时的char字符
然后用while遍历字符数组
如果两边都是字母,则交换位置
否则,如果左边不是字母,则左边++
否则,如果右边不是字母,则右边--
最后return 这个char数组,注意,需要转成String
java代码
class Solution {
public String reverseOnlyLetters(String s) {
char[] chars = s.toCharArray();
int l = 0, r = s.length() - 1;
char temp;
while (l < r) {
if (((chars[l] >= 65 && chars[l] <= 90)
|| (chars[l] >= 97 && chars[l] <= 122))
&& ((chars[r] >= 65 && chars[r] <= 90)
|| (chars[r] >= 97 && chars[r] <= 122))) {
temp = chars[l];
chars[l] = chars[r];
chars[r] = temp;
l++;
r--;
} else if (!((chars[l] >= 65 && chars[l] <= 90)
|| (chars[l] >= 97 && chars[l] <= 122))) {
l++;
} else if (!((chars[r] >= 65 && chars[r] <= 90)
|| (chars[r] >= 97 && chars[r] <= 122))) {
r--;
}
}
return new String(chars);
}
}
- 总结:题目不难,就是双指针遍历即可,只不过这里空间用了一个数组。但是我觉得这个数组也是必须的,因为String进行转变的时候,会生成新的字符串。