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 <= 10033 <= S[i].ASCIIcode <= 122Sdoesn’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;
}
}
?>