ACwing刷题笔记 16.替换空格
思路
思路:首先遍历一遍字符串,这样就可以统计出字符串中空格的字数,同时也统计该字符串的字符个数,然后计算新的字符串长度,重新设定字符串长度,新的字符串长度等于原来的长度加上2 * 空格数目。之后,准备两个指针,p1指向原始的字符串末尾(‘\0’),p2指向新的字符串末尾,接下来移动指针p1,如果当前指向的字符不是空格,那么就将该字符复制到p2指向的位置,然后继续向下移动p1,如果p1指向的字符是一个空格,那么将p2位置填充’%20’,p2继续向下移动,p1移动一格。(由于在原字符串上进行改动,所以p1指向的那些字符会被p2的赋值’%20’字符给覆盖掉)
AC 代码
class Solution {
public:
string replaceSpaces(string &str) {
int originalLength = 0;// 原始字符串长度
int CountBlank = 0;// 统计空格数
int i = 0;
while(str[i] != '\0')
{
originalLength++;
if(str[i] == ' ')
{
CountBlank++;
}
i++;
}
//计算替换之后的字符串长度
int newLength = originalLength + 2 * CountBlank;
str.resize(newLength);
int p1 = originalLength;
int p2 = newLength;
while(p1 >= 0 && p1 < p2)
{
if(str[p1] != ' ')
{
str[p2] = str[p1];
p1--;
p2--;
}
else
{
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
p1--;
}
}
return str;
}
};