题意描述:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
示例:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
解题思路:
Alice: 可以用Python 写,字符串的split
+ 列表切片
完成字符串反转。
Bob: 可以用Java写,字符串的split
+StringBuffer
的 reverse
完成字符串反转。
Alice: 也可以用 栈 来实现字符串反转, 先入栈再出栈也不错的。
Bob: 😎😎
代码:
Java 方法一: split + reverse
class Solution {
public String reverseWords(String s) {
String[] words = s.split("\\s+");
StringBuffer ans = new StringBuffer("");
for(int i=0; i<words.length; ++i){
StringBuffer tmp = new StringBuffer(words[i]);
ans.append(tmp.reverse());
if(i != words.length-1){
ans.append(" ");
}
}
return ans.toString();
}
}
Python 方法一: split + 列表切片
class Solution:
def reverseWords(self, s: str) -> str:
return " ".join([x[::-1] for x in s.split(" ")])
Java 方法二:使用栈完成字符串的反转
class Solution {
public String reverseWords(String s) {
StringBuffer answer = new StringBuffer();
Stack tmp = new Stack();
s += " ";
for(int i=0; i<s.length(); ++i){
if(s.charAt(i) == ' '){
StringBuffer reversedWord = new StringBuffer();
while(!tmp.empty()){
reversedWord.append(tmp.pop());
}
answer.append(reversedWord + " ");
}else{
tmp.push(s.charAt(i));
}
}
return answer.toString().trim();
}
}
Python 使用栈反转字符串
class Solution:
def reverseWords(self, s: str) -> str:
stack = []
answer = ""
word = ""
for x in s:
if x == " ":
while len(stack):
word += stack.pop()
answer += word + " "
word = ""
else:
stack.append(x)
while len(stack):
word += stack.pop()
answer += word + " "
return answer.strip();
易错点:
- 一些测试样例:
"Let's take LeetCode contest"
"How much do you love me ?"
"Y U I"
"[]"
""
- 答案:
"s'teL ekat edoCteeL tsetnoc"
"woH hcum od uoy evol em ?"
"Y U I"
"]["
""
总结: