前言
之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两天晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还会给刷的题总结下,谈谈自己的一些思考,和自己的思路等等,希望对小伙伴能有所帮助吧,也可以借此机会把自己短板补一补,希望自己能坚持下去呀
链表的合集
字符串
题目
请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
示例 1:
输入: s = "We are happy." 输出: "We%20are%20happy."
题解
我们先来个简单的做法,如果我们是做业务,不考虑空间复杂度,我们来看看怎么写,其实就是把我们的空格换成%20,其实就是for循环,然后替换,我们来看下代码怎么写
class Solution { public String replaceSpace(String s) { StringBuilder string = new StringBuilder(); for (int i = 0; i < s.length(); i++){ char c = s.charAt(i); if (c == ' '){ string.append("%20"); } else { string.append(c); } } return string.toString(); } }
当然这种写法,我们用了新的空间,所以我们得重新想想更好的方法了
由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。
获得 s 的长度 length 创建字符数组 array,其长度为 length * 3 初始化 size 为 0,size 表示替换后的字符串的长度 从左到右遍历字符串 s 获得 s 的当前字符 c 如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3 如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1 遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串
class Solution { public String replaceSpace(String s) { int length = s.length(); char[] array = new char[length * 3]; int size = 0; for (int i = 0; i < length; i++) { char c = s.charAt(i); if (c == ' ') { array[size++] = '%'; array[size++] = '2'; array[size++] = '0'; } else { array[size++] = c; } } String newStr = new String(array, 0, size); return newStr; } }
结束
好了,今天这题就到这了,我们明天继续,我是小六六,三天打鱼,两天晒网!