前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."
解析
思路1:双指针
通过题目我们知道要把字符串中的空格替换为"20%",看到字符串
我们就有思路了,字符串本质就是数组中存储的对吧,那我们先把数据扩充一下,然后到空格的地方添加这个符号不就行了!
i指向新长度的末尾,j指向旧长度的末尾。
如下动图能很好说明原理:
扩充数组
//扩充空间,空格数量2倍 StringBuilder str = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if(s.charAt(i) == ' '){ str.append(" "); } }
有空格情况 定义两个指针
扩充完数组之后就开始替换空格为符号了,注意细节
这里我们要定义两个字符串,第一个字符串是原始字符串,第二个字符串为我们扩充后的字符串
通过倒序遍历第一个字符串,也遍历第二个字符串。当第一个字符串遇到空格的时候,就在第二个字符串的数组中开始加符号,依次类推!
//有空格情况 定义两个指针 int left = s.length() - 1;//左指针:指向原始字符串最后一个位置 s += str.toString(); int right = s.length()-1;//右指针:指向扩展字符串的最后一个位置 char[] chars = s.toCharArray(); while(left>=0){ if(chars[left] == ' '){ chars[right--] = '0'; chars[right--] = '2'; chars[right] = '%'; }else{ chars[right] = chars[left]; } left--; right--; }
完整代码如下:
public String replaceSpace(String s) { if(s == null || s.length() == 0){ return s; } //扩充空间,空格数量2倍 StringBuilder str = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if(s.charAt(i) == ' '){ str.append(" "); } } //若是没有空格直接返回 if(str.length() == 0){ return s; } //有空格情况 定义两个指针 int left = s.length() - 1;//左指针:指向原始字符串最后一个位置 s += str.toString(); int right = s.length()-1;//右指针:指向扩展字符串的最后一个位置 char[] chars = s.toCharArray(); 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); }
下面我们在补充一种方式
新建StringBuilder,遇到空格的时候就sb.append添加符号,不是空格那就添加该字符 最后将StringBuilder转换为String即可
public static String replaceSpace(String str){ if (str == null){ return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == ' '){ sb.append("%20"); }else { sb.append(str.charAt(i)); } } return sb.toString(); }