仅仅反转字母


给定一个字符串 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();
    }
}
相关文章
相关标签/搜索