剑指offer之字符串

总结:

  1. 思路:扩容后,从后向前扫描,设置两个指针,从而减少从前往后的移动次数
     1 /*面试题5:时间复杂度O(n)
     2 请实现一个函数,将一个字符串中的空格替换成“%20”。
     3 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
     4  */
     5 /*
     6 思路:先扫描一遍,记录空格个数
     7 根据空格个数设置新的字符串长度,
     8 设置两个指针index(原字符串尾部开始)和indexNum(新字符串尾部开始),
     9 (两个指针同时从后向前移动)判断当前index是否为空格,是的话indexNum增添20%,不是的话复制原字符
    10  */
    11 public class ReplaceSpace {
    12     public static String replaceSpace(StringBuffer str){
    13         int len = str.length();
    14         int spaceNum = 0;
    15         for (int i = 0;i < len;i++){
    16             if(str.charAt(i) == ' ') spaceNum++;
    17         }
    18         int index = len - 1,indexNew = len + 2*spaceNum - 1;
    19         str.setLength(indexNew+1);//注意长度
    20         for (;index >= 0;index--){
    21             if(str.charAt(index) == ' '){
    22                 str.setCharAt(indexNew--,'0');
    23                 str.setCharAt(indexNew--,'2');
    24                 str.setCharAt(indexNew--,'%');
    25                 }
    26             else str.setCharAt(indexNew--,str.charAt(index));
    27         }
    28         return str.toString();
    29 
    30     }
    31     public static void main(String args[]){
    32         StringBuffer str = new StringBuffer();
    33         Scanner cin = new Scanner(System.in);
    34         str.append(cin.nextLine());
    35         System.out.println(replaceSpace(str));
    36     }
    37 }
原文地址:https://www.cnblogs.com/lizijiangmm/p/8798905.html