TRANCE
1 力扣题20:有效的括号
1.1 题目描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
1.2 思路分析
1.2.1 栈
可借助栈,将(,{,[入栈,遇),},]出栈匹配,不匹配则括号无效,同时需考虑一些特殊情况。
1.3 代码实现
1.3.1 栈
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
boolean result = true;
for (int i=0; i<s.length(); i++) {
if (s.charAt(i)=='('||s.charAt(i)=='{'||s.charAt(i)=='[')
stack.push(s.charAt(i));
else {
if (stack.size()==0) {
result = false;
break;
}
char c = stack.pop();
if (((s.charAt(i)==')'&&c=='(')||
(s.charAt(i)=='}'&&c=='{')||
(s.charAt(i)==']'&&c=='[')))
continue;
else {
result = false;
break;
}
}
}
if (stack.size()!=0)
result = false;
return result;
}
2 力扣题21:合并两个链表
2.1 题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
2.2 思路分析
2.2.1 顺序接
按顺序比较,直到一个链表为空,之后将不为空的链表的后面节点直接接上新链表的后面,注意特殊情况。
2.3 代码实现
2.3.1 顺序接
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if (list1==null&&list2==null)
return null;
ListNode result = new ListNode();
ListNode tmp = new ListNode();
boolean first = true;
while(list1!=null && list2!=null) {
if (list1.val>=list2.val) {
if (first) {
result = new ListNode();
tmp = result;
tmp.val = list2.val;
first = false;
} else {
ListNode newNode = new ListNode();
newNode.val = list2.val;
tmp.next = newNode;
tmp = newNode;
}
list2 = list2.next;
} else {
if (first) {
result = new ListNode();
tmp = result;
tmp.val = list1.val;
first = false;
} else {
ListNode newNode = new ListNode();
newNode.val = list1.val;
tmp.next = newNode;
tmp = newNode;
}
list1 = list1.next;
}
}
if (first) {
if (list1!=null) {
result = new ListNode();
tmp = result;
tmp.val = list1.val;
first = false;
list1 = list1.next;
}
if (list2!=null) {
result = new ListNode();
tmp = result;
tmp.val = list2.val;
first = false;
list2 = list2.next;
}
}
if (list1!=null)
tmp.next = list1;
if (list2!=null)
tmp.next = list2;
return result;
}