Given a string S
, return the “reversed” string where all characters that are not a letter stay in the same place, and all letters reverse their positions.
Example 1:
Input:
"ab-cd"
Output:
"dc-ba"
Example 2:
Input:
"a-bC-dEf-ghIj"
Output:
"j-Ih-gfE-dCba"
Example 3:
Input:
"Test1ng-Leet=code-Q!"
Output:
"Qedo1ct-eeLg=ntse-T!"
Note:
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S
doesn’t contain\
or"
Straightforward solution.
- collect letters in reverse order.
- go through string from beginning, if it’s letter, replace with letter from reverse string, else keep special chars and adjust pointer accordingly
- of course there’s space for improvement, but not necessary
<?php class Solution { /** * @param String $S * @return String */ function reverseOnlyLetters($S) { $x = ''; $y = ''; for($i = strlen($S)-1; $i >=0; $i -- ){ if(ctype_alpha($S[$i])){ $x .= $S[$i]; } } $xi = 0; for($i = 0; $i < strlen($S); $i ++){ if(!ctype_alpha($S[$i])){ $y .= $S[$i]; } else { $y .= $x[$xi]; $xi ++; } } return $y; } } ?>