【leetcode】剑指Offer面试题05. 06
面试题05.替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:0 <= s 的长度 <= 10000
思路:这个题目就很简单了,就是把第 i 位字符替换;涉及字符串循环加减用StringBuilder效率会高一点:
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for(int i=0;i<s.length();i++){
if(s.charAt(i)!=' ')res.append(s.charAt(i));
else res.append("%20");
}
return res.toString();
}
}
当然也可以直接用字符串加减,但是即使复杂度一样,运行时间还是要比用StringBuilder慢很多:
class Solution {
public String replaceSpace(String s) {
String str="";
for(int i=0;i<s.length();i++){
if(s.charAt(i)!=' ')str+=s.charAt(i);
else str+="%20";
}
return str;
}
}
面试题06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
输入:head = [1,3,2]
输出:[2,3,1]
限制:0 <= 链表长度 <= 10000
思路:可以实现倒叙输出的结构有很多,用ArrayList或者stack都可以(当然也有其他结构),笔者选择了ArrayList;
class Solution {
public int[] reversePrint(ListNode head) {
if(head==null)return new int[0];
List<Integer> list=new ArrayList<>();
while(head!=null){
list.add(head.val);
head=head.next;
}
int[] res=new int[list.size()];
for(int i=0;i<list.size();i++){
res[i]=list.get(list.size()-1-i);
}
return res;
}
}