Java日记2018-05-25
2018-05-25 本文已影响0人
hayes0420
- 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy。
本来以为算法很清晰很简单,结果卡壳,最后发现是填充时候错误,一个空格填3个,实际应该补2个字符
public static String replaceSpace(StringBuffer str) {
if(str==null) return null;
int oldLen = str.length();
for(int i =0;i<str.length();i++) {
if(str.charAt(i)==' ') {
str.append("%2");//这里应该补两个字符
}
}
System.out.println("2:"+str.toString());
int p1 = oldLen - 1, p2 = str.length() - 1;
while(p1>=0&&p2>p1) {
if(str.charAt(p1)==' '){
str.setCharAt(p2, '0');
str.setCharAt(p2-1, '2');
str.setCharAt(p2-2, '%');
p2=p2-3;
p1--;
//System.out.println("p2:"+p2);
System.out.println("1:"+str.toString());
} else {
str.setCharAt(p2, str.charAt(p1));
p1--;
p2--;
//System.out.println("p1:"+p1+" p2:"+p2);
System.out.println("2:"+str.toString());
}
}
System.out.println("+:"+str.toString());
return str.toString();
}
- 从尾到头打印链表
递归
public ArrayList<Integer> printListFromTailToHead(ListNode node){
Stack<Integer> sta = new Stack<>();
while(node!=null) {
sta.add(node.val);
node=node.next;
}
ArrayList<Integer> ret = new ArrayList<>();
while(sta.isEmpty()==false) {
ret.add(sta.pop());
}
return ret;
}