话不多说,先上题目
转载于力扣(LeetCode)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
由此可见,是一个遍历String字符串的问题,但是String字符串又没有合适的索引方法或者定义,所以通用的做法当然把他转为char字符数组,因为String字符串中有一个方法:toCharArray()
顾名思义,就是把String字符串转成拥有索引的字符数组,
我们来查查看Java Api(Application Programming Interface)即应用程序接口,你可以理解为一本Java的新华字典,有了它我们就不需要翻书或者百度查找你想要找的类(java库中存在的类及其相关信息和方法解释)了。
而我比较喜欢用这个
https://www.apiref.com/java11-zh/java.base/java/lang/String.html
Java11的中文版Api
回到这里,我们看到
那么我们就可以做到
char[] su=s.toCharArray();
把s这个String字符串型通过该方法得到其字符数组
然后接着的问题是遍历,上一篇文章看到了大家喜欢用while循环来减少循环,当然这里只有一个循环,我们也要养成习惯,
然后我们用while循环,定义一个temp变量,表示当前字符位置,
循环条件就是 temp<su.length
第一个问题,如何从字符串得到有索引能遍历的字符数组(解决)
第二个问题来了,Solution定义的返回类型是String啊,你不可能给回他一个个字符结果吧,
所以这里有一个经验,我不知道是不是,对不对,
字符串和字符数组的转换:字符串-->字符数组就是用的toCharArray()方法
而 字符数组-->字符 一定要经过StringBuilder这个类
因为StringBuilder类拥有toString方法的同时,
通过查阅api
最关键的是他的append方法十分灵活,顾名思义就是在最后加入东西:
其中,加入char一个字符也行,加入字符串数组也行,加入String字符串也行
这个就变得非常灵活了,反正最后能输出String类型就可以了,所以我的代码如下
class Solution {
public String replaceSpace(String s) {
char[] su=s.toCharArray();
int temp=0;
StringBuilder sre=new StringBuilder();
while(temp<su.length){
if(su[temp]==' ')
sre.append("%20");
else
sre.append(su[temp]);
temp++;
}
return sre.toString();
}
}
空间上我想不到优化的方法了,可能可以去掉char[] su=s.toCharArray();
直接在循环中使用s.toCharArray()[temp]这样的手法来做吧,但是我觉得也区别不算太大,所以大家可以借鉴借鉴,
我是一名在努力的java小白,现在喜欢研究算法写一些小文章和大家研究,主要是以java小白的心态和大家探讨入门的java算法和面试算法题,如有意见,尽管提字,我们一起学习进步。