面试题5:替换空格


题意:请实现一个函数,把字符串中的每个空格替换成"%20"。

算法:双指针扫描

思路:1)遍历原数组,并根据空格个数求出最终的字符串长度
2)使用两个指针,一个指针i指向原字符串末尾,另一个j指向最终字符串末尾
3)两个指针都从后往前遍历,i遍历到空格时,指针j依次填充'0','2','%'

时间复杂度:O(n)
空间复杂度:O(1)

string replaceSpaces(string &str) {
    int new_length = 0;
    for(int i = 0;i < str.size();i ++)
    {
        if(str[i] == ' ')
            new_length += 3;
        else new_length += 1;
    }
    int i = str.size() - 1, j = new_length - 1;
    // 重新设置数组长度
    str.resize(new_length);

    while(i >= 0 && j >= 0)
    {
        if(str[i] == ' ')
        {
            str[j --] = '0';
            str[j --] = '2';
            str[j --] = '%';
        }
        else str[j --] = str[i];
        i --;
    }
    return str;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 预备知识: 字符串: 1.C/C++中每个字符串都以字符 '\0' 作为结尾。好处:方便找到尾部。缺点:额外字符开...
    冰枫澈阅读 211评论 0 0
  • 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字...
    繁星追逐阅读 82评论 0 0
  • 【题目描述】请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过...
    fighting_css阅读 216评论 1 0
  • 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We...
    scott_alpha阅读 155评论 0 0
  • 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经...
    凌霄文强阅读 385评论 0 2