文章目錄
- 1.問題描述
- 2.代碼詳情
1.問題描述
給定一個字符串 S,返回 “反轉后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置發生反轉。
示例 1:
輸入:“ab-cd”
輸出:“dc-ba”
示例 2:
輸入:“a-bC-dEf-ghIj”
輸出:“j-Ih-gfE-dCba”
示例 3:
輸入:“Test1ng-Leet=code-Q!”
輸出:“Qedo1ct-eeLg=ntse-T!”
2.代碼詳情
方法 :字母棧
將 s 中的所有字母單獨存入棧中,所以出棧等價于對字母反序操作。(或者,可以用數組存儲字母并反序數組。)然后,遍歷 s 的所有字符,如果是字母我們就選擇棧頂元素輸出。
復雜度分析
時間復雜度:O(N),其中 N 是 S 的長度。
空間復雜度:O(N)。
java:
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 res = new StringBuilder();for (char c : S.toCharArray()){if (Character.isLetter(c)){res.append(letters.pop());}else{res.append(c);}}return res.toString();}
}
python:
class Solution:def reverseOnlyLetters(self, S: str) -> str:letters = [c for c in S if c.isalpha()]res = []for c in S:if c.isalpha():res.append(letters.pop())else:res.append(c)return "".join(res)