https://leetcode-cn.com/problems/reverse-only-letters/

这道题来自:第 105 场周赛
双指针置换::
/*
@可爱抱抱呀
执行用时:1 ms, 在所有 Java 提交中击败了44.93%的用户
内存消耗:39.6 MB, 在所有 Java 提交中击败了7.64%的用户
2022年2月21日 12:46
*/
class Solution {
    public String reverseOnlyLetters(String s) {
        StringBuilder ans=new StringBuilder();
        int l=0,r=s.length()-1;
        while(l<s.length()){
            if(Character.isLetter(s.charAt(l))){
                while(!Character.isLetter(s.charAt(r))){r--;}
                ans.append(s.charAt(r));
                r--;
            }
            else{ans.append(s.charAt(l));}
            l++;
        }
        return ans.toString();
    }
}
遇到倒序的时候用栈:注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。
/*
@可爱抱抱呀
执行用时:1 ms, 在所有 Java 提交中击败了44.93%的用户
内存消耗:39.4 MB, 在所有 Java 提交中击败了12.05%的用户
2022年2月21日 12:52
*/
class Solution {
    public String reverseOnlyLetters(String s) {
        Deque<Character> stack=new LinkedList<>();
        for(int i=0;i<s.length();i++){if(Character.isLetter(s.charAt(i))){stack.push(s.charAt(i));}}
        StringBuilder ans=new StringBuilder();
        for(int i=0;i<s.length();i++){
            if(Character.isLetter(s.charAt(i))){ans.append(stack.pop());}
            else{ans.append(s.charAt(i));}
        }
        return ans.toString();
    }
}
luo-jin-e0
落矜
1 天前
简单双指针模拟即可
class Solution {
    public String reverseOnlyLetters(String str) {
        int i=0,j=str.length()-1;
        char[] s=str.toCharArray();
        while(i<j){
            while(i<j&&!((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122))) i++;
            while(i<j&&!((s[j]>=65&&s[j]<=90)||(s[j]>=97&&s[j]<=122))) j--;
            char c=s[i];s[i]=s[j];s[j]=c;
            i++;j--;
        }
        return String.valueOf(s);
    }
}










