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();
        }
    
    }
    
  • 相关阅读:
    java定时器
    存储过程
    set and get 使用方法
    getXxx setXxx入门理解
    oracle数据字典
    消息队列的两种模式
    Cookie/Session机制详解
    mysql千万级数据量根据索引优化查询速度
    window7下配置python2.7+tornado3.3开发环境
    priority queue优先队列初次使用
  • 原文地址:https://www.cnblogs.com/helloHKTK/p/11630914.html
Copyright © 2011-2022 走看看