替换空格

   请实现一个函数,把字符串中每个空格替换成“20%”,例如:输入“we are happy.”,则输出“we20%are20%happy.”。

如果我们最直观的做法从头到尾扫描字符串,每一次碰到空格的时候做替换。假设字符串长度是n,对每个空格字符,需要移动后面的O(n)个字符,因此对含有O(n)个空格字符的字符串而言总的时间效率是O(n^2)。在这里如果用java的替换方法replace可以轻松搞定

时间复杂度O(n^2)的代码

1 package com.feimao.com.feimao.a2.test;
2 
3 public class ReplaceBlank {
4     static final String s = "We are happy.";
5     public static void main(String[] args){
6         System.out.println("原数组 = " + s);
7         System.out.println("替换的数组 " + s.toString().replace(" " , "20%"));
8     }
9 }

  我们换一种思路,把从前向后替换改成从后向前替换。

  我们可以先遍历一次字符串,这样就能统计出字符串的空格的总数。变可以由此计算替换之后字符串的总长度。每替换一个空格,长度增加2,因此替换后的字符串的长度等于原来长度加上2*空格数。

统计字符串的空格总数代码

 1     public static int getBlankNum(String s) {
 2         int count = 0;
 3         for (int i = 0; i < s.length(); i++) {
 4             String tempS = String.valueOf(s.charAt(i));
 5             if (tempS.equals(" ")) {
 6                 count++;
 7             }
 8         }
 9         return count;
10     }

  首先准备两个指针,p1和p2。p1指向原始字符串的末尾,p2指向替换之后字符串的末尾。接下来我们向前移动指针p1,逐个把它指向字符复制到p2指向的位置,直到碰到第一个空格为止,也就是做了字符串拷贝。整个算法代码如下:

 1 package com.feimao.com.feimao.a2.test;
 2 
 3 public class ReplaceBlank {
 4     public static String s = "We are happy.";
 5     public static int getBlankNum(String s) {
 6         int count = 0;
 7         for (int i = 0; i < s.length(); i++) {
 8             String tempS = String.valueOf(s.charAt(i));
 9             if (tempS.equals(" ")) {
10                 count++;
11             }
12         }
13         return count;
14     }
15 
16     public static void printArray(char[] testArray) {
17         for (char i : testArray) {
18             System.out.print(i);
19         }
20         System.out.println();
21     }
22 
23     public static void replaceBlank(String s) {
24         if (s == null || s.length() < 0) {
25             System.out.println("请正确输入数组");
26             return;
27         }
28         int length = s.length();
29         int newLength = s.length() + getBlankNum(s) * 2;
30         char[] temparray = new char[newLength];
31         System.arraycopy(s.toCharArray(), 0, temparray, 0, s.toCharArray().length);
32         int p1 = length - 1;
33         int p2 = newLength - 1;
34         while (p1 >= 0 && p1 != p2) {
35             if (temparray[p1] == ' ') {
36                 temparray[p2] = '0';
37                 p2--;
38                 temparray[p2] = '2';
39                 p2--;
40                 temparray[p2] = '%';
41                 p2--;
42             } else {
43                 temparray[p2] = temparray[p1];
44                 p2--;
45             }
46             p1--;
47         }
48         System.out.println("替换空格后的字符串: ");
49         printArray(temparray);
50     }
51 
52     public static void main(String[] args) {
53         System.out.println("原字符串 = " + s);
54         replaceBlank(s);
55     }
56 
57 
58 }

运行结果:

原文地址:https://www.cnblogs.com/feimaoyuzhubaobao/p/10193438.html