题目描述:
将字符串中的空格替换为“%20”,要求时间复杂度为O(N),空间复杂度为O(1)
思路:
《剑指offer》也有一个一样的题目,空间复杂度为O(1)说明不允许用另一个数组来保存新的字符串,时间复杂度为O(N)则可以通过从尾到头遍历来保证,具体代码如下:
C++代码实现:
#include<iostream>
#include<string>
using namespace std;
int main(){
char str[1024];
//读入一行字符串,gets与char []数组配套使用
gets(str);
int len=0;
int numOfBlank=0;
//计算字符串中空格数目以及字符串长度
for(int i=0;str[i]!='\0';i++){
if(str[i]==' ')
numOfBlank++;
len++;
}
//打印检查空格计算是否正确
cout<<numOfBlank<<endl;
//替换空格以后的长度
int newLen=len+2*numOfBlank-1;
//从尾到头替换空格,平移字符串
for(int i=len-1;i>=0;i--){
if(str[i]!=' ')
str[newLen--]=str[i];
else{
str[newLen--]='0';
str[newLen--]='2';
str[newLen--]='%';
}
}
cout<<str<<endl;
return 0;
}
程序运行结果:
ss jj kk
3
ss%20jj%20kk%20
Program ended with exit code: 0