僅僅反轉字母


給定一個字符串 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();
    }
}
相關文章
相關標籤/搜索