面试题5:替换空格

1.题目描述

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

2.分析边界条件及测试用例

1.考虑特殊输入,空串、单空格、多空格,测试用例“”,“ ”,“  ”;

2.考虑输入字符串无空格,测试用例“string”;

3.考虑正例输入,字符串前、中、后存在空格(单多空格),测试用例“ hello  world ”。

3.分析求解

1.运用Java的String包的replace方法

1     str = str.replace(" ","%20");

2.暴力遍历求解

对整个字符串进行从左至右遍历,遇到空格进行替换(若为字符数组,需要向后移位,会使得复杂度为O(n^2))。

3.运用双指针的算法思想求解

双指针的算法思想:设置两个指示位(指针),指向字符串的末尾,移动一个指针至空格所在位置,此时两个指针之间的子串不存在空格,是最终字符串的组成部分,通过在此段字串之前添加字符串“%20”,对整个字符串进行此操作,所得结果即为要求字符串。

 1     public static String replaceSpace(String str) {
 2         int len = str.length();
 3         int p1 = len - 1;
 4         int p2 = len - 1;
 5         String re = "";
 6         while(p1 >= 0 && p2 >= 0) {
 7             if (str.charAt(p1) != ' ') {
 8                 p1--;
 9             } else {
10                 re = "%20" + str.substring(p1 + 1, p2 + 1) + re;
11                 System.out.println(re);
12                 p1--;
13                 p2 = p1;
14             }
15         }
16         if (p2 >= 0) {
17             re = str.substring(0, p2 + 1) + re;
18 
19         }
20         return re;
21     }

复杂度分析:时间复杂度O(n),空间复杂度O(1)。

posted @ 2019-10-20 21:27  fooever  阅读(259)  评论(0)    收藏  举报