标签:空格替换 sys 存在 bsp else 暴力 复杂度 空间 设置
请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”
1.考虑特殊输入,空串、单空格、多空格,测试用例“”,“ ”,“ ”;
2.考虑输入字符串无空格,测试用例“string”;
3.考虑正例输入,字符串前、中、后存在空格(单多空格),测试用例“ hello world ”。
1 str = str.replace(" ","%20");
对整个字符串进行从左至右遍历,遇到空格进行替换(若为字符数组,需要向后移位,会使得复杂度为O(n^2))。
双指针的算法思想:设置两个指示位(指针),指向字符串的末尾,移动一个指针至空格所在位置,此时两个指针之间的子串不存在空格,是最终字符串的组成部分,通过在此段字串之前添加字符串“%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)。
标签:空格替换 sys 存在 bsp else 暴力 复杂度 空间 设置
原文地址:https://www.cnblogs.com/zxzhou/p/11710028.html