leetcode 热题100道Day03
有效的字母异位词
* 242.有效的字母异位词 字典接法
* 时间复杂读o(m+n), 空间复杂度o(1)
public static boolean isAnagram(String s, String t){
int[] record = new int[26];
for (int i = 0;i < s.length();i++){
record[s.charAt(i)-'a']++;
System.out.println(s.charAt(i)-'a');
System.out.println('a');
}
for (int i = 0; i<t.length();i++){
record[t.charAt(i)-'a']--;
}
for (int i : record) {
if (i != 0){
return false;
}
}
return true;
}
字母异位词分组
public class 字母异位词分组 {
public static void main(String[] args) {
String[] strings = {"eat","tea","tan","ate","nat","bat"};
graupAnagrams(strings);
}
public static List<List<String>> graupAnagrams(String[] strs){
HashMap<String, ArrayList<String>> map = new HashMap<>();
ArrayList<Object> res = new ArrayList<>();
int cnt = 0;
for (String str : strs) {
char[] chars = str.toCharArray();
System.out.println(chars);
Arrays.sort(chars);
System.out.println(chars);
String nstr = new String(chars);
if (!map.containsKey(nstr)){
map.put(nstr,new ArrayList<>());
}
map.get(nstr).add(str);
}
return new ArrayList<>(map.values());
}
}
排序链表
class Solution {
public ListNode sortList(ListNode head) {
return mergeSort(head);
}
private ListNode mergeSort(ListNode head){
if (head==null||head.next==null) return head;
ListNode slowp=head,fastp=head.next.next,l,r;
while (fastp!=null&&fastp.next!=null){
slowp=slowp.next;
fastp=fastp.next.next;
}
r=mergeSort(slowp.next);
slowp.next=null;
l=mergeSort(head);
return mergeList(l,r);
}
private ListNode mergeList(ListNode l,ListNode r){
ListNode tmpHead=new ListNode(-1);
ListNode p=tmpHead;
while (l!=null&&r!=null){
if (l.val<r.val){
p.next=l;
l=l.next;
}else {
p.next=r;
r=r.next;
}
p=p.next;
}
p.next=l==null?r:l;
return tmpHead.next;
}
}