zoukankan      html  css  js  c++  java
  • 面试题4-替换空格

    面试题4-替换空格

    基础知识

    在Java和C#这样面向对象的语言中,字符串String是以对象的形式存在的,当初始化一个String对象之后,它的内容就是不能被改变的,一旦视图改变String的内容就会产生一个新的实例。对String的操作都是生成一个新的String实例并在返回值中返回。因此,如果对String做连续的修改,每一次的修改都会产生一个临时对象,这样的开销太大会影响效率。在Java中,定义了两个与字符串相关的类型:StringBuilder和StringBuffer,这两个类型的能更好的对字符串进行修改,容纳修改后的结果。
    StringBuffer和StringBuilder的区别在这里说明。

    题目

    请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"We are happy",则输出"We%20are%20happy"。

    解题思路

    首先从前往后遍历一边字符串,统计字符串中空格的数目,以此为基础统计替换之后字符串的总长度。
    从后往前准备两个指针,P1和P2,同时移动P1和P2,把P1指向的字符复制到P2的位置上去,直到P1遇到空格,P1向前移动一个字符,在P2之前插入"%20",并向前移动3个字符。
    重复上述过程,直到P1和P2相遇为止。
    所有的字符在这个过程中都只移动一次,这个算法的复杂度为O(n)。

    代码

    1. public class Solution
    2. public String replaceSpace(StringBuffer str) {//注意这里使用的StringBuffer 
    3. int len = str.length(); 
    4. if( str == null || len <=0
    5. return ""
    6. int blankNums = 0
    7. for(int i = 0; i < len; i++){ 
    8. if(str.charAt(i) == ' '
    9. blankNums ++; 

    10. if(blankNums == 0
    11. return str.toString(); 
    12. int newlength = len + blankNums * 2
    13. str.setLength(newlength); 
    14. int index1 = len - 1
    15. int index2 = newlength - 1
    16. while(index1 >= 0 && index2 > index1){ 
    17. if(str.charAt(index1) == ' '){ 
    18. str.setCharAt(index2,'0'); 
    19. index2 --; 
    20. str.setCharAt(index2, '2'); 
    21. index2 --; 
    22. str.setCharAt(index2, '%'); 
    23. index2 --; 
    24. }else
    25. str.setCharAt(index2, str.charAt(index1)); 
    26. index2 --; 

    27. index1 --; 

    28. return str.toString(); 


  • 相关阅读:
    头文件里面的ifndef /define/endif的作用
    互联网小知识
    IT技术开发人员获得成功的六大步骤
    ab网站压力测试
    微软校招试题
    C程序编译过程浅析
    makefile变量赋值
    printf的题目
    Oracle命名规范
    javascript(js)小数精度丢失的解决方案
  • 原文地址:https://www.cnblogs.com/chailinbo/p/8401669.html
Copyright © 2011-2022 走看看