题目 请实现一个函数,把字符串 s 中的每个空格替换成%20。示例 1: 输入:s = We are happy.输出:We%20are%20happy. 思路 要把字符串中的空格替换成%20,首先就是在原有的字符数组里扩容,相
题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy."输出:"We%20are%20happy.
思路
要把字符串中的空格替换成%20,首先就是在原有的字符数组里扩容,相当于每个空格再额外扩大两个空格的位置。然后通过双指针的方法,将i指针指向未扩容的数组末尾,j指针指向扩容后的数组末尾,然后从后往前填充。如果从前往后填充的话,每次添加元素都要将添加元素之后的所有元素向后移动,增加了时间复杂度为O(n^2)。
class Solution { public String replaceSpace(String s) { if(s == null || s.length() == 0){ return s; } //扩充空间,空格数量的2倍 StringBuilder str = new StringBuilder(); //StringBuilder是对字符串本身进行修改的类 for(int i = 0; i < s.length(); i++){ if(s.charAt(i) == ' '){ //charAt(i)方法用来返回i索引处的字符 str.append(" "); } } //若是没有空格,则直接返回 if(str.length() == 0){ return s; } //有空格情况 定义两个指针 int left = s.length() - 1; //指向原始字符串最后一个位置 s += str.toString(); //在原字符串的基础上扩容(2倍的空格字符大小) int right = s.length() - 1; //指向扩容后字符串的最后一个位置 char[] chars = s.toCharArray(); //将字符串s转成字符数组 while(left >= 0){ if(chars[left] == ' '){ chars[right--] = '0'; chars[right--] = '2'; chars[right] = '%'; }else{ chars[right] = chars[left]; } left--; right--; } return new String(chars); } }转载至《代码随想录》