链表题 面试题02.04. 分割链表290. 单词规律20. 有效的括号
Posted 王嘻嘻-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表题 面试题02.04. 分割链表290. 单词规律20. 有效的括号相关的知识,希望对你有一定的参考价值。
目录
面试题02.04. 分割链表
package leetcode;
//分割链表给你一个链表的头节点 head 和一个特定值 x ,
// 请你对链表进行分隔,使得所有 小于 x 的节点都出现在
// 大于或等于 x 的节点之前。
public class interview02_04
public ListNode partition(ListNode head, int x)
ListNode smallHead = new ListNode(-1);
ListNode smallTail = smallHead;
ListNode bigHead = new ListNode(-1);
ListNode bigTail = bigHead;
//边界条件
if (head == null)
return null;
while (head!=null)
if (head.val<x)
//小链表 尾插
smallTail.next=head;
smallTail=head;
else
//大链表 尾插
bigTail.next=head;
bigTail=head;
head = head.next;
//将大链表拼接到小链表后边
bigTail.next=null;
smallTail.next=bigHead.next;
return smallHead.next;
290. 单词规律
用哈希表解决此题,对照题目的要求,第一个字符串的格式是abba型或者其他类型,判断第二个字符串为此类型。
1.创建第一个HashMap为map1,key值存放character-a,value值存放List-a出现的位置
2.将第二个字符串按照空格切分,存放到数组中,创建第二个HashMap。key值存放string-dog,value值与步骤一相同
3.判断第一个字符串的长度与步骤二创建的数组长度是否一致,不一致直接返回false,反之继续
4.循环中将字符串与数组添加到两个map中,同时判断两个value的值是否相同,如果不同直接返回false;
5.循环结束代表两个map对应value值都相同,返回true.
class Solution
public boolean wordPattern(String pattern, String s)
String[] strings = s.split(" ");
if (strings.length!=pattern.length())
return false;
Map<Character, List<Integer>> map = new HashMap<>();
Map<String ,List<Integer>> map2 = new HashMap<>();
for (int i = 0; i < pattern.length(); i++)
char c = pattern.charAt(i);
if (map2.get(strings[i])!=null)
List<Integer> list = map2.get(strings[i]);
list.add(i);
map2.put(strings[i],list);
else
List<Integer> list = new ArrayList<>();
list.add(i);
map2.put(strings[i],list);
if (map.get(c)!=null)
List<Integer> list = map.get(c);
list.add(i);
map.put(c,list);
if (map.get(c).equals(map2.get(strings[i]))==false)
return false;
else
List<Integer> list1 = new ArrayList<>();
list1.add(i);
map.put(c,list1);
if (map.get(c).containsAll(map2.get(strings[i]))==false)
return false;
return true;
20. 有效的括号
class Solution
public boolean isValid(String s)
Stack<Character> stack = new Stack<>();
//将字符串转为字符输出
for (int i = 0; i < s.length(); i++)
char c = s.charAt(i);
//碰到左括号直接入栈
if (c == '' || c == '[' || c == '(')
stack.push(c);
else
//此时是个右括号
if (stack.isEmpty())
//右括号是第一个字符,没有相应的左括号与之匹配,返回false
return false;
//弹出左括号
char top = stack.pop();
if (c == ')' && top != '(')
return false;
if (c == ']' && top != '[')
return false;
if (c == '' && top != '')
return false;
//此时字符串已经扫描完毕,判断当前栈中是否为空
return stack.isEmpty();
本小节完^_^
以上是关于链表题 面试题02.04. 分割链表290. 单词规律20. 有效的括号的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题笔记之链表篇面试题 02.04. 分割链表