反转字符串Ⅰ
题目描述
思路
用双指针法,左指针指向开头,右指针指向结尾,当判定可交换时,交换两个指针指向的位置的字符,并左指针右移,右指针左移。
代码实现
class Solution {
public:
void reverseString(vector<char>& s)
{
//双指针法
int j=s.size()-1;
for(int i=0;i<s.size();i++)
{
if(i<j&&j>=0)
{
//也可以用swap函数代替
char temp;
temp=s[j];
s[j]=s[i];
s[i]=temp;
j--;
}
else
{
break;
}
}
}
};
反转字符串Ⅱ
题目描述
思路
本题的解题思路与反转字符串Ⅰ类似,首先是自左到右for循环遍历string,但是步长为2K。
在遍历的时候进行判断并交换。
代码实现
class Solution {
public:
string reverseStr(string s, int k)
{
for(int i=0;i<s.size();i+=(2*k))
{
//只需要让左指针每次移动2k个长度就行
if((i+k)<=s.size())
{
for(int start=i,end=i+k-1;start<end;start++,end--)
{
swap(s[start],s[end]);
}
}
else
{
for(int start=i,end=s.size()-1;start<end;start++,end--)
{
swap(s[start],s[end]);
}
}
}
return s;
}
};