目录
反转字符串
链接:
语言知识:
1.c++中可以直接使用字符串交换字符.
swap( s[i] ,s[j] );
题解:
class Solution {
public:
void reverseString(vector<char>& s) {
int left=0;
int right=s.size()-1;
while(left<right)
{
char temp=s[left];
s[left]=s[right];
s[right] = temp;
left++;
right--;
}
}
};
反转字符串Ⅱ
链接:
特点/解题步骤:
如题所示
语言知识:
1.c++中转换字符 的方式?
string s;
reverse(s[i],s[j]);
2.如果是string,怎么转换字符串?
string s
reverse(s.begin() + i, s.end());
3.对string使用si.size() ,得到的是字符串不包含 \0 的长度
题解:
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k );
} else {
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
替换空格
链接:
解题思路:
class Solution {
public:
string replaceSpace(string s) {
int space_num = 0;
for(int i=0;i<s.size();i++)
{
if(s[i]== ' ')
{
space_num++;
}
}
int right = s.size()-1 + 2*space_num;
int left = s.size()-1;
s.resize( s.size()+ 2*space_num);
while(left<right) //不能写成 left <= right
{
if(s[left] == ' ')
{
s[right--]='0';
s[right--]='2';
s[right--]='%';
}
else
{
s[right--]=s[left];
}
left--;
}
return s;
}
};
反转字符串
链接:
题解:
class Solution {
public:
void reverse(string &s,int start,int end)
{
for(int i=start,j=end;i<j;i++,j--)
{
swap(s[i],s[j]);
}
}
void removeExtraSpace(string &s)
{
int slow=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!= ' ') //问题1:下面这几行代码还不太熟练
{
if(slow !=0 ) s[slow++] = ' '; //
while( (s[i]!=' ') && (i<s.size()))
{
s[slow++]=s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
//先去除空个,然后全部反转
//然后根据空格反转
removeExtraSpace(s);
reverse(s,0,s.size()-1);
int start = 0;
for(int i=0;i<=s.size();i++)
{
if( i == s.size() || s[i] == ' ' )
{
reverse(s,start,i-1);
start = i+1;
}
}
return s;
}
};