美文网首页
关于剑指offer-Task5(空格替换)中的典型错误

关于剑指offer-Task5(空格替换)中的典型错误

作者: Jocelyn_b0e1 | 来源:发表于2018-10-17 23:56 被阅读0次

Task5: 请实现一个函数,把字符串中的每个空格替换成"%20"。例如,输入"We are happy.",则输出"We%20are%20happy."

这道题书上给出了一种时间复杂度为O(n)的解法,从字符串的尾部开始进行复制和替换,准备指针p1和p2,P1指向原字符串的末尾,P2指向替换后的字符串末尾。之后的步骤不详细写了,这个算法也很经典了。

当我写完了这个题之后(用JAVA),我去网上搜了一些其他程序员的写法,结果却发现了一件令人匪夷所思的事情...

绝大部分的JAVA程序员的写法竟然是新建一个临时的字符数组char[] c用于存放替换后数组,并且整个替换过程遵循原算法,利用两个指针从后往前进行替换。如下:

int indexofOriginal = length - 1;  
        int indexofNew = newLength - 1;  
        System.out.println("未替换空格时的字符串:");  
        printArray(tempArray);  
        while (indexofOriginal >= 0 && indexofOriginal != indexofNew) {  
            if (tempArray[indexofOriginal] == ' ') {  
                tempArray[indexofNew--] = '%';  
                tempArray[indexofNew--] = '2';  
                tempArray[indexofNew--] = '0';  
            } else {  
                tempArray[indexofNew--] = tempArray[indexofOriginal];  
            }  
            indexofOriginal--;  
        }
--------------------- 
作者:水的化合物的专栏 
来源:CSDN 
原文:https://blog.csdn.net/abc7845129630/article/details/52698879 
版权声明:本文为博主原创文章,转载请附上博文链接!

我当时就震惊了......如果能用到另一个临时数组的话,为什么要用书中的这种算法呢?直接从头往后替换不就行了?如下:

char[] c = s.toCharArray();
char[] current_c = new char[currentlength];
        int i = 0;
        int j = 0;
        while(i<s.length()){
            if (c[i]!=' '){
                current_c[j] = c[i];
                i++;
                j++;
            }
            else
            {
                current_c[j] = '%';
                current_c[j+1] = '2';
                current_c[j+2] = '0';
                i++;
                j = j+3;
            }

PS. 请原谅我写出这样简单粗暴又ugly的代码...我只是想帮助理解...

思考:该题的重点在于,替换过程要在原字符串上进行替换,并且保证输入的字符串后面有足够多的空余内存。如果利用一个临时数组存放替换后的字符串,那么整个算法是没有意义的!

相关文章

  • 关于剑指offer-Task5(空格替换)中的典型错误

    Task5: 请实现一个函数,把字符串中的每个空格替换成"%20"。例如,输入"We are happy.",则输...

  • [剑指offer] 替换空格

    本文首发于我的个人博客:尾尾部落 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符...

  • 剑指offer - 替换空格

    题目 请实现一个函数,把字符串中的每个空格都换成%20。例如:输入"We are happy",则输出“We%20...

  • 《剑指offer》替换空格

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

  • 剑指offer:替换空格

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

  • 剑指offer 替换空格

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

  • [剑指Offer]替换空格

    本文首发于我的个人博客Suixin’s Blog原文: https://suixinblog.cn/2019/02...

  • 【剑指offer】- 替换空格

    1、题目描述 请实现一个函数,把字符串中的每个空格替换成"%20"。 你可以假定输入字符串的长度最大是1000。注...

  • 剑指 offer ---替换空格

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

  • 替换空格

    《剑指offer》面试题5:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we...

网友评论

      本文标题:关于剑指offer-Task5(空格替换)中的典型错误

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