《程序员代码面试指南》——字符串中空格替换(C++实现)

题目描述:

将字符串中的空格替换为“%20”,要求时间复杂度为O(N),空间复杂度为O(1)

思路:

《剑指offer》也有一个一样的题目,空间复杂度为O(1)说明不允许用另一个数组来保存新的字符串,时间复杂度为O(N)则可以通过从尾到头遍历来保证,具体代码如下:

C++代码实现:

#include<iostream>

#include<string>

using namespace std;

int main(){

    char str[1024];

扫描二维码关注公众号,回复: 175682 查看本文章

    //读入一行字符串,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



猜你喜欢

转载自blog.csdn.net/weixin_39138071/article/details/80033650