给定一个字符串 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(); } }