• 剑指offer2:替换空格


    题目描述:

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

    思路:

    如果在原字符串上编辑:从前往后遍历,从前往后替换的话,需要移动多次,时间复杂度和空间复杂度太高。
    剑指offer的思路是从前往后遍历,从后往前替换,插入替换时只需要移动一次。
    也可直接使用java中replaceAll方法:str.toString().replaceAll(" ", "%20");

    如果可以开辟新的字符串,则简单多了,直接遍历原字符串,逐个加入新的字符串中,如果有空格,新的字符串append(“%20”)即可,空间复杂度变高了

     1 public class Tihuankongge {
     2     public String replace(StringBuffer str){
     3         int oldlength = str.length();//原字符串长
     4         int count = 0;//空格数
     5         
     6         for(int i = 0; i < oldlength; i++){
     7             if(str.charAt(i)==' ') count++;
     8         }
     9         int newlength = oldlength+count*2;
    10         int old = oldlength-1;
    11         int index = newlength-1;
    12         //System.out.println(str.length());
    13         //System.out.println(count);
    14         //System.out.println(old);
    15         //System.out.println(index);
    16         str.setLength(newlength);//设置新的字符串长度防止越界
    17         while(old >= 0 && index > old){
    18             if(str.charAt(old)==' '){
    19                 str.setCharAt(index--, '0');
    20                 str.setCharAt(index--, '2');
    21                 str.setCharAt(index--, '%');
    22             }
    23             else {
    24                 str.setCharAt(index--, str.charAt(old));
    25             }
    26             --old;
    27         }
    28         return str.toString();
    29     }
    30     public static void main(String[] args) {
    31         // TODO Auto-generated method stub
    32         Tihuankongge tihuankongge = new Tihuankongge();
    33         StringBuffer str = new StringBuffer("We are happy.");
    34         System.out.println(tihuankongge.replace(str));
    35     }
    36 
    37 }
    1 可以开辟新的字符串的情况:
    2         StringBuffer stringBuffer = new StringBuffer();
    3         for(int i = 0; i < str.length();i++){
    4             if(str.charAt(i)==' ') stringBuffer.append("%20");
    5             else {
    6                 stringBuffer.append(str.charAt(i));
    7             }
    8         }
    9         return stringBuffer.toString();
  • 相关阅读:
    js 遇到问题
    table 排序 添加 删除 等操作
    json对象
    .style, .getComputedStyle(),.currentStyle区别
    3个div 宽度移入移出时变化
    运动 js
    OWASP Top 10之文件上传漏洞简析(二)
    owasp top10 之文件上传漏洞简析
    前台实现ajax 需注意的地方
    apache-Rewrite重写规则配置
  • 原文地址:https://www.cnblogs.com/zlz099/p/8532654.html
Copyright © 2020-2023  润新知