04_替换空格

作者: 是新来的啊强呀 | 来源:发表于2020-05-18 10:48 被阅读0次

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

    思路:
    1、先遍历一次字符串统计出字符串中空格的总数,并由此计算出替换之后的字符串的总长度。
    2、之后从字符串的后面开始复制和替换,准备两个指针,分别指向原始字符串的末尾p1和替换之后字符串的末尾p2,向前移动p1,同时逐个把它指向的字符复制到p2位置,直到碰到空格位置,此时p1向前移动一格,在p2位置插入字符串‘%20’,之后p1继续移动,过程相似。
    3、最终p1和p2指向同一位置。

    public String ReplaceBlank(StringBuffer string){
            // 遍历一次字符串获取字符串的长度和空格数量
            int originalLength = string.length();  // 字符串长度
            int numberOfBlank = 0;  // 空格数量
            for(int i=0;i< string.length();i++){
                if(string.charAt(i) ==' '){
                    numberOfBlank++;
                }
            }
            // 替换空格
            int newLength = originalLength+2*numberOfBlank;  // 空格替换后的长度
            string.setLength(newLength);  // 注意重新设置string的空间大
            int indexOfOriginal = originalLength-1;
            int indexOfNew = newLength-1;
            while(indexOfOriginal>=0 && indexOfNew>indexOfOriginal){  // 两个指针到达同一位置的时候跳出循环
                if(string.charAt(indexOfOriginal) == ' '){  // 指到空格的时候进行替换空格
                    string.setCharAt(indexOfNew--,'0');  // 注意i--,是先赋值,再减一
                    string.setCharAt(indexOfNew--,'2');
                    string.setCharAt(indexOfNew--,'%');
                }else{
                    System.out.println(string.charAt(indexOfOriginal));
                    string.setCharAt(indexOfNew--,string.charAt(indexOfOriginal));
                }
                indexOfOriginal--;
            }
            return string.toString();
        }
    

    时间复杂度:O(n)

    相关文章

      网友评论

        本文标题:04_替换空格

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