剑指offer2:替换空格

Posted zlz099

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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();

 

以上是关于剑指offer2:替换空格的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer——5:替换空格》代码

java刷题--剑指offer05 替换空格

剑指offer 2.替换空格

替换空格-剑指Offer

剑指offer字符串面试题 替换空格

剑指OFFER替换空格