【剑指offer】-2-替换空格

替换空格

https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&&tqId=11155&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

1. 用Java自带的函数str.toString().replace(" ","%20")

public class Solution {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replace(" ", "%20");
    }
}

2. 开辟一个新的字符串

当遇到 " ",就追加 "%20",否则遇到什么追加(append)什么

import java.util.*;
public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<str.length();i++){
            char c = str.charAt(i);
            if(c == ' '){
                sb.append("%20");
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }
}

3. 在当前字符串上进行替换

  • 先计算替换后的字符串需要多大的空间,并对原字符串空间进行扩容;

  • 从后往前替换字符串的话,每个字符串只需要移动一次;

  • 如果从前往后,每个字符串需要多次移动,效率较低
    从后往前如下:

    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 oldLength = str.length();
          int oldIndex = oldLength - 1;
          str.setLength(oldLength + spaceNum * 2);
          int newLength = str.length();
          int newIndex = newLength - 1;
    
          for (; oldIndex >= 0; oldIndex--) {
              if (str.charAt(oldIndex) == ' ') {
                  str.setCharAt(newIndex--, '0');
                  str.setCharAt(newIndex--, '2');
                  str.setCharAt(newIndex--, '%');
              } else {
                  str.setCharAt(newIndex--, str.charAt(oldIndex));
              }
          }
          return str.toString();
      }
    }
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务