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

917. 仅仅反转字母_java

来源:力扣用户,可爱抱抱呀

这道题来自:第 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);
}
}