0
点赞
收藏
分享

微信扫一扫

917. 仅仅反转字母

爪哇驿站 2022-02-23 阅读 45
leetcode

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);
    }
}
举报

相关推荐

0 条评论