zoukankan      html  css  js  c++  java
  • 剑指offer-替换空格

     

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

    思路一:从左向右扫描字符串替换

    • 一个字符替换为三个
    • 每遇到一个空格,空格后面所有字符向右移动两个位置
    • 字符串长度为n, 对每个空格而言,需要移动后面O(n)个字符
    • 算法的时间复杂度为O(n^2)
    思路二:从右到左扫描字符串替换
    • 统计空格数,字符串长度增加 空格数 * 2
    • 维持两个指针p1, p2
    • p1指向原字符串长度末尾, p2指向新字符串长度末尾
    • 当p1遇到空格时, p2 向前移动并替换字符为 '0' '2' '%'
    • 把p1指针指向的字符拷贝到p2指针指向的字符
    • 所有字符都只移动一次,时间复杂度为O(n)
    public class Solution {
        public String replaceSpace(StringBuffer str) {
            // 空格的个数
            int spaceNum = 0;
            // 遍历查找空格的个数
            for(int i=0; i<str.length(); i++) {
                if(str.charAt(i) == ' ') {
                    spaceNum ++;
                }
            }
            int indexOld = str.length() - 1;  // 原字符串下标
            int indexNew =  str.length() + 2 * spaceNum - 1; // 新字符串下标
            str.setLength(indexNew+1);   // 设置新的str长度
            while (indexOld >= 0 ) {
                if(str.charAt(indexOld) == ' ') {
                    str.setCharAt(indexNew--, '0');
                    str.setCharAt(indexNew--, '2');
                    str.setCharAt(indexNew--, '%');
                } else {
                    str.setCharAt(indexNew--, str.charAt(indexOld));
                }
                indexOld --;
            }
            return str.toString();
            
        } 
    }
  • 相关阅读:
    API
    API
    for in
    event flow
    object
    Report of program history
    正则表达式
    伪类与伪元素
    Position
    js学习之原型(补充)
  • 原文地址:https://www.cnblogs.com/zywu/p/5756838.html
Copyright © 2011-2022 走看看