有效的括号
力扣——20. 有效的括号
思路:
- 定义一个栈用来存储左括号
- 定义一个字典,用来存放键值对右括号->左括号
- 循环遍历s中的括号,左括号存入栈中
- 当遇到第一个右括号时,我们可以判断它的左边一定是一个左括号
- 这时就把栈顶左括号与map中的右括号对应值比较(并且比较后要把这个元素推出栈,可以保证下一个左括号仍然对应右括号)
![image]()
点击查看所有代码
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class isValid {
public boolean isValid(String s) {
/* Stack<Character> stack=new Stack<Character>();
char[] chars=s.toCharArray();
for (int i = 0; i < chars.length/2; i++) {
stack.push(chars[i]);
}
HashMap<Character,Character> map=new HashMap<>();
map.put('(',')');
map.put('[',']');
map.put('{','}');
boolean isFlag=true;
for (int i = chars.length/2; i < chars.length; i++) {
if(chars[i]!=map.get(stack.pop())){
isFlag=false;
}
}
return isFlag;*/
int n = s.length();
if (n % 2 == 1) return false;
//这里定义一个字典,用来存放键值对右括号->左括号
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put('}', '{');
map.put(']', '[');
Deque<Character> stack = new LinkedList<>();
for (char ch : s.toCharArray()) {
//循环遍历s中的括号,左括号存入栈中
//当遇到第一个右括号时,我们可以判断它的左边一定是一个左括号
//这时就把栈顶左括号与map中的右括号对应值比较(并且比较后要把这个元素推出栈)
if(map.containsKey(ch)){
//这里判断栈为空可以减少计算的次数,提高效率
if(stack.peek()!=map.get(ch)||stack.isEmpty()) {
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
//注意为栈可能为空!!!
return stack.isEmpty();
}
}
有效的括号
力扣——61.旋转链表
思路:
- 得到链表长度,同时让最后一个节点指向头节点将链表连接成一个环
ListNode node=head;
int size=1;//链表长度
while (node.next!=null){//得到链表长度,并将node指向最后一个节点
node=node.next;
size++;
}
- 接下来回到头节点,得到走了k步之后的链表尾节点(size-k%size-1)
//走了k步之后链表的最后一个节点应该是size-k%size-1(对于环的问题经常用到mod)
for (int i = 0; i <size-k%size-1; i++) {
head=head.next;
}
- 断开尾节点,返回头节点
node=head;
head=head.next;
node.next=null;
return head;
点击查看代码
public class rotateRight {
public ListNode rotateRight(ListNode head, int k) {
if(head==null||head.next==null)return head;
ListNode node=head;
int size=1;//链表长度
while (node.next!=null){//得到链表长度,并将node指向最后一个节点
node=node.next;
size++;
}
node.next=head;//将链表连成一个环
//走了k步之后链表的最后一个节点应该是size-k%size-1(对于环的问题经常用到mod)
for (int i = 0; i <size-k%size-1; i++) {
head=head.next;
}
node=head;
head=head.next;
node.next=null;
return head;
}
}