LeetCode 0917. Reverse Only Letters Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0917. Reverse Only Letters

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.

 

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 '\\'.

Solutions

Solution 1: Two Pointers

We use two pointers i and j to point to the head and tail of the string respectively. When i < j, we continuously move i and j until i points to an English letter and j points to an English letter, then we swap s[i] and s[j]. Finally, we return the string.

The time complexity is O(n), and the space complexity is O(n), where n is the length of the string.

PythonJavaC++GoTypeScriptRust
class Solution: def reverseOnlyLetters(self, s: str) -> str: cs = list(s) i, j = 0, len(cs) - 1 while i < j: while i < j and not cs[i].isalpha(): i += 1 while i < j and not cs[j].isalpha(): j -= 1 if i < j: cs[i], cs[j] = cs[j], cs[i] i, j = i + 1, j - 1 return "".join(cs)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !