题目描述
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.
给定一个字符串S,返回反转后的字符串,其中所有不是字母的字符都位于相同的位置,所有字母都反转它们的位置。
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!"
思路
将S的字母单独收集到一个堆栈中,这样弹出堆栈就会将字母颠倒过来。(或者,我们也可以将字母收集到一个数组中,并将数组反转。)然后再将所有元素加入一个StringBuilder中,若为字母则从栈中拿,若不是则直接从字符串中获取到字符添加。
class Solution {
public String reverseOnlyLetters(String S) {
Stack<Character> letters = new Stack();
for (char c: S.toCharArray())
if (Character.isLetter(c))
letters.push(c);
StringBuilder ans = new StringBuilder();
for (char c: S.toCharArray()) {
if (Character.isLetter(c))
ans.append(letters.pop());
else
ans.append(c);
}
return ans.toString();
}
}