Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
题目:反转字符串。给定一个字符串,保留字符串中空格和每个单词的顺序,反转每个单词。
思路:以空格为标志,对每个小结的单词进行操作
Language : cpp
class Solution {
public:
string reverseWords(string s) {
int front = 0; //记录空格后第一个字符的位置
int str_length = s.length(); //字符串长度
for(int i = 0; i <= str_length; i++) {
if(i == s.length() || s[i] == ' ') { //找到空格反转,没有空格整个字符串反转
reverse(&s[front], &s[i]);
front = i + 1;
}
}
return s;
}
};
Language : python
第一种最笨的方法:先使用split以空格为标志分开字符串,然后对每个字符串进行反转操作,再将字符串进行拼接。
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
result = ''
input_str = s.split(' ')
for each in input_str:
result = result + each[::-1] + ' '
return result[:-1]
第二种方法,对于第一种方法进行了改进,使用join进行拼接。
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
return ' '.join(x[::-1] for x in s.split())
第三种方法,不实用迭代方法,加快运行速度。首先反转每个单词的顺序,然后反转整个字符串:
class Solution(object):
def reverseWords(self, s):
"""
:type s: str
:rtype: str
"""
return ' '.join(s.split()[::-1])[::-1]
我的LeetCode代码获取:https://github.com/Jack-Cherish/LeetCode