zoukankan      html  css  js  c++  java
  • 【剑指Offer编程题】替换空格

    问题:

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

    思路:

    1.计算出字符串长度(old_len + (space_len * 2))
    2.从新长度的最后一位往前放置字符串内容,保证元素一次到达自己的位置

    时间复杂度:

    O(n)

    
    /**
     * 请实现一个函数,将一个字符串中的每个空格替换成“c”。
     * 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
     */
    public class Main {
    
        public static void main(String[] args) {
            Main main = new Main();
            StringBuffer s =new StringBuffer("We Are Happy");
            System.out.println(main.replaceSpace(s));
    
        }
    
        /**
         * 思路:
         * 1.计算出字符串长度(old_len + (space_len * 2))
         * 2.从新长度的最后一位往前放置字符串内容,保证元素一次到达自己的位置
         *
         * 时间复杂度:O(n)
         * @param str
         * @return
         */
        public String replaceSpace(StringBuffer str) {
            //原本长度
            int old_len = str.length();
            //空格长度
            int space_len = 0;
            for (int i = 0; i < old_len; i++) {
                if (str.charAt(i) == ' ') {
                    space_len++;
                }
            }
            //设置新字符串长度
            int new_len = old_len + (space_len * 2);
            str.setLength(new_len);
    
            //从最后一位往前移动
            int index_old = old_len - 1;//原字符串索引
            int index_new = new_len - 1;//新字符串索引
            while (index_new >=0) {
                //若该位置为空格
                if (str.charAt(index_old) == ' ') {
                    str.setCharAt(index_new--, '0');
                    str.setCharAt(index_new--, '2');
                    str.setCharAt(index_new--, '%');
                }
                //否则该位置不为空格
                else {
                    str.setCharAt(index_new--, str.charAt(index_old));
                }
                index_old--;
            }
            return str.toString();
        }
    }
    
  • 相关阅读:
    Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
    无向图求点割集的算法
    hdu 2121无根最小树形图要建一个虚拟节点
    hdu 1576扩展欧几里得算法
    欧几里德算法的扩展-求解不定方程
    hdu 3072 强连通+缩点+最小树形图思想
    1352 集合计数 扩展欧几里德算法
    1247 可能的路径 逆向思维
    Atcoder B
    C. Timofey and a tree 观察题 + dfs模拟
  • 原文地址:https://www.cnblogs.com/iriswang/p/11084623.html
Copyright © 2011-2022 走看看