LeetCode 344
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
- 直接反转,python代码 如下:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s[:] = s[::-1]
- 双指针进行反转,Python代码如下:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
i, j = 0, len(s) - 1
while i<j:
s[i],s[j]=s[j],s[i]
i+=1
j-=1
return s
双指针反转,C++代码如下:
class Solution {
public:
void reverseString(vector<char>& s) {
if (s.size()>0)
{
vector<char>::iterator p;
vector<char>::iterator q;
p = s.begin();
q = s.end()-1;
while (p < q)
{
char tmp = *p;
*p = *q;
*q = tmp;
p++;
q--;
}
}
}
};
LeetCode557
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”
Python代码解答:
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(word[::-1] for word in s.split(' '))
C++代码解答:
class Solution {
public:
string reverseWords(string s) {
if(s.size()==0){
return s;
}
int front = 0;
int back = 0;
for(back = 0; back<s.size()-1; back++){
if(s[back] != ' ')
continue;
std::reverse(s.begin()+front, s.begin()+back);
front = back + 1;
back = back + 1;
}
std::reverse(s.begin()+front, s.end());
return s;
}
};
通过上述这两个例子,我们可以发现,在进行整个字符串反转和字符串中的单词反转过程中,Python的解决方案可以说是很简单粗暴了。当然,算法的核心知识点还是一样的。人生苦短,我用Python!