917. Reverse Only Letters

1. Description

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.

2. Example

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!”

3. Constraints

  • 1 <= s.length <= 100
  • s consists of characters with ASCII values in the range [33, 122].
  • s does not contain ‘"’ or ‘\’.

4. Solutions

Two Pointers

n = str.size()
Time complexity: O(n)
Space complexity: O(1)

class Solution {
public:
    string reverseOnlyLetters(string str) {
        for (int left = 0, right = str.size() - 1; left < right;) {
            while (left < right && !isalpha(str[left])) {
                ++left;
            }

            while (left < right && !isalpha(str[right])) {
                --right;
            }

            swap(str[left], str[right]);
        }

        return str;
    }
};
comments powered by Disqus