美文网首页
简单的字符串替换也要好好思考

简单的字符串替换也要好好思考

作者: 胡丽亚与石乐志 | 来源:发表于2017-03-27 15:36 被阅读0次

    问题描述:

    请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    在处理一些网页时,这种替换很有用处,看到题目的第一想法当然就是遍历一遍,遇到空格的话就替换成%20,后面的字符串则整体向后平移。
    但仔细思考一下发现如果这么做的话,时间复杂度其实是o(n2)。因为大体上每个字符都会平移多次。这时就要想想怎么样让字符串平移的次数只有一次。答案很简单,从后向前遍历即可。时间复杂度从O(n2)变为O(n)。效率大大增强。C语言代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #define max 10000
    #include <string.h>
    
    void replace(char c[]){
        int len = strlen(c),i,j,n=0;
        for(i = 0; i < len; i++){
            if(c[i] == 32){
                n++;
            }
        }
        int p1 = len - 1;
        int p2 = p1 + 2 * n;
        for(i = p1; i >=0 ; i--){
            if(c[i] == 32){
                c[p2--] = '0';
                c[p2--] = '2';
                c[p2--] = '%';
            }
            else{
                c[p2--] = c[i];
            }
        }
        printf("%s",c);
    }
    int main()
    {
        char origin[max];
        gets(origin);
        replace(origin);
        return 0;
    }

    相关文章

      网友评论

          本文标题:简单的字符串替换也要好好思考

          本文链接:https://www.haomeiwen.com/subject/nyerottx.html