题目:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
题解思路:
方法一:原地回转
函数代码:
class Solution {
public:
void reverseString(vector<char>& s) {
int i=0;
int n=s.size();
for(i=0;i<n/2;i++)
{
swap(s[i],s[n-i-1]);
}
}
};
函数代码二:
class Solution {
public:
void reverseString(vector<char>& s) {
int n=s.size();
for(int i=0,j=n-1;i<n/2;i++,j--)
{
swap(s[i],s[j]);
}
}
};
方法二:递归+双指针
1.我们实现递归函数 help,它接受两个参数:left 左指针和 right 右指针。
2.首先调用函数我们传递首尾指针反转整个字符串 return help(0, len(s) - 1)。
3.判断left>=right,返回上一步。
否则交换 s[left] 和 s[right] 和调用 help(left + 1, right - 1)。
函数代码:
class Solution {
public:
void help(vector<char>& s,int left,int right)
{
if(left>=right)
{
return;
}
char t=s[left];
s[left]=s[right];
s[right]=t;
left++;
right--;
help(s,left,right);
}
void reverseString(vector<char>& s)
{
int n=s.size();
help(s,0,n-1);
}
};