【题目】请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
1. 时间复杂度为O(n)的算法。
首先,遍历原字符数组,得到空格的个数,乘以2就是新字符数组比原字符数组增加的字符空间。
然后,初始化新字符数组,定义两个指针,p1指向原字符数组的末尾,p2指向新字符数组的末尾。
最后,从后往前移动p1,根据p1指向的元素,给p2指向的位置赋值,同时移动p2。
1 public class Main { 2 3 public static void main(String[] args) { 4 5 String string = "We are happy."; 6 7 Main main = new Main(); 8 9 System.out.println(main.process(string)); 10 11 } 12 13 public String process(String string) { 14 15 if (null == string) { 16 return null; 17 } 18 19 char[] chars = string.toCharArray(); 20 21 // 计算空格个数 22 int count = 0; 23 for (int i = 0; i < chars.length; i++) { 24 if (' ' == chars[i]) { 25 count++; 26 } 27 } 28 29 char[] charsConv = new char[chars.length + 2 * count]; 30 31 int p2 = charsConv.length - 1; 32 int p1 = chars.length - 1; 33 34 while (p1 >= 0) { 35 36 if (' ' == chars[p1]) { 37 charsConv[p2] = '0'; 38 charsConv[--p2] = '2'; 39 charsConv[--p2] = '%'; 40 } else { 41 charsConv[p2] = chars[p1]; 42 } 43 44 p2--; 45 p1--; 46 } 47 48 return String.valueOf(charsConv); 49 50 } 51 }