給定一個字符串 S,返回反轉後的字符串,其中不是字母的字符都保留在原地,而全部字母的位置發生反轉java
首先正序遍歷字符串,若是不是字母,就追加,不然,逆序遍歷字符串進行追加,爲此咱們須要維護一個指針 j 從後往前遍歷字符串app
class Solution { public String reverseOnlyLetters(String S) { int j = S.length() - 1; StringBuilder sb = new StringBuilder(); for(int i = 0; i < S.length(); i++) { if(Character.isLetter(S.charAt(i))) { while(!Character.isLetter(S.charAt(j))) { j--; } sb.append(S.charAt(j--)); } else { sb.append(S.charAt(i)); } } return sb.toString(); } }
也能夠藉助棧來實現,將 s 中的全部字母單獨存入棧中,不是字母不存入,而後,遍歷 s 的全部字符,若是是字母咱們就選擇棧頂元素輸出ui
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(); } }