一、字符串
第一题
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
public String replaceSpace(String s) {
StringBuilder result = new StringBuilder();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == ' '){
result.append("%20");
}else{
result.append(s.charAt(i));
}
}
return result.toString();
}
java中String类型的数据是不可改变的,直接使用String的一些方法都是低效的,转换成StringBuilder类型,再进行改动才是高效的。常用的方法有append(), delete(), substring()等
第二题、第三题
题目链接
知识点:
- 确定有限状态自动机,每次输入都将对状态进行一次改变,这样我们可以判断到当前整个输入的状态,以此来进行进一步的计算和输出操作。
- HashMap是Map接口的一种常见实现,基于哈希表实现,用数组和链表存储数据,可以更加有效的处理键值对数据结构
- char类型的数据是不能使用Integer.parseInt()方法转成int类型,也不能用(int)强转,前者只能转字符串(StringBuilder类型也不可以),后者的结果是unicode编码,而因该使用:
int = char - '0';
这种方法。 - Integer.MAX_VALUE和Integer.MIN_VALUE表示int值得最大值和最小值,int范围是[ 2 31 − 1 2^{31} − 1 231−1, − 2 31 -2^{31} −231],使用int类型的变量,来直接判断是否越界的方法:
if(num > Integer.MAX_VALUE/10 || (num==Integer.MAX_VALUE/10 && digit>7)){
return (sign==1)?Integer.MAX_VALUE:Integer.MIN_VALUE;
}
链表
第一题
题目链接
知识点:
- java中数组创建完后长度是固定的,若要动态改变长度的话,可以用ArrayList或者LinkList数据结构,两者都实现了List接口,但是前者使用数组进行数据存储,后者使用双向链表实现。ArrayList可以使用toArray()方法转化成一个数组。
- 链表
ListNode head
变量要想获取值只需要head.val
即可。head.val
以及head.next
都是属性,不是方法. ArrayList<Integer>
不能使用int,因为在java中基本数据类型不能直接作为泛型参数传递给泛型类或者接口,泛型只接受引用类型。- 这道题用
ArrayList
效率很低,用栈会也很低效。栈的操作有:stack.push(value)
、stack.pop()
、stack.isEmpty()
等。
第二题
- 创建链表实例的方法是
LinkNode a=new LinkNode(int i)
;创建一个空链表:LinkNode a=null
。