题目:
Given a string s
, reverse the string according to the following rules:
- All the characters that are not English letters remain in the same position.
- All the English letters (lowercase or uppercase) should be reversed.
Return s
after reversing it.
Example 1:
Input: s = "ab-cd" Output: "dc-ba"
Example 2:
Input: s = "a-bC-dEf-ghIj" Output: "j-Ih-gfE-dCba"
Example 3:
Input: s = "Test1ng-Leet=code-Q!" Output: "Qedo1ct-eeLg=ntse-T!"
Constraints:
1 <= s.length <= 100
s
consists of characters with ASCII values in the range[33, 122]
.s
does not contain'\"'
or'\\'
.
思路:
比较常规的双指针简单题,左指针找字母,右指针找字母,然后交换即可。这里确认当前是不是字母使用c内置的isalpha()判断即可。
代码:
class Solution {
public:
string reverseOnlyLetters(string s) {
int l = 0, r = s.size() - 1;
while (l < r) {
while (l < r && l < s.size() && !isalpha(s[l])) {
l++;
}
while (l < r && r >= 0 && !isalpha(s[r])) {
r--;
}
swap(s[l], s[r]);
l++;
r--;
}
return s;
}
};