码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer2:替换空格

时间:2018-03-09 11:10:24      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:pos   防止   ted   stringbu   时间复杂度   span   else   越界   ati   

题目描述:

请实现一个函数,将一个字符串中的空格替换成“%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:替换空格

标签:pos   防止   ted   stringbu   时间复杂度   span   else   越界   ati   

原文地址:https://www.cnblogs.com/zlz099/p/8532654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!