zoukankan      html  css  js  c++  java
  • 002 替换空格

    替换空格(学会从后往前的替换思想,来减少移动次数)

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

    方法一:Java调库

    public String replaceSpace(StringBuffer str) {
        	return str.toString().replace(" ", "%20"); // StringBuffer先转成字符串再替换
    }
    

    方法二:不调库的方法

    1. 先计算替换后的字符串需要多大的空间,并对原字符串空间进行扩容;
    2. 从后往前替换字符串的话,每个字符串只需要移动一次;
    3. 如果从前往后,每个字符串需要多次移动,效率较低。

    具体思路:

    (1)用p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾;

    (2)向前移动指针p1,逐个把它指向的字符复制到p2指向的位置,直到碰到第一个空格为止;

    (3)碰到第一个空格后,把p1向前移动1格,在p2之前插入字符串“%20”,由于“%20”长度为3,同时也要把p2向前移动3格。

    // 自己代码(牛客网通过)
    public class Demo02 {
        public static void main(String[] args)
        {
            StringBuffer s = new StringBuffer("we are happy.");
            System.out.println(replaceSpace(s));
        }
        public static String replaceSpace(StringBuffer str) {
            int i;
            int str_len = str.length();
            if (str_len <= 0)
                return "";
    
            //先遍历一遍,找到所有的空格个数
            int spacenum = 0;
            for (i = 0; i < str_len; i++)
                if (str.charAt(i) == ' ')
                    spacenum++;
    
            int p1 = str_len-1;
            int p2 = p1 + spacenum * 2; // 因为空格本身占用了一个位置,所以替换成%20时,只需增加2个位置即可
            str.setLength(p2+1); // 重新调整长度
    
            while (p1!=p2)
            {
                if (str.charAt(p1)!=' ')
                {
                    str.setCharAt(p2--, str.charAt(p1--)); // 将p1指向的复制到p2指向的
                }
                else
                {
                    p1--; // 先将p1向前移动一位
                    str.setCharAt(p2--, '0');
                    str.setCharAt(p2--, '2');
                    str.setCharAt(p2--, '%');
                }
            }
    
            return str.toString();
        }
    
    }
    
  • 相关阅读:
    websocket协议解决消息发送问题 Could not decode a text frame as UTF-8.
    成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'minimatch'
    FastDFS客户端与自定义文件存储系统
    fastdfs 中client.conf 文件
    centos 中 redis 的安装
    redis安装成功后get: command not found
    Shell基础知识(二)
    Shell基础知识(一)
    binary search模板总结
    配置远程jupyter notebook
  • 原文地址:https://www.cnblogs.com/helloHKTK/p/11630914.html
Copyright © 2011-2022 走看看