242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"

输出: true

示例 2:

输入: s = "rat", t = "car"

输出: false

说明:

你可以假设字符串只包含小写字母。

进阶:

如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

思路

//排序 比较str
//遍历两个字符串进行统计(hashmap 、数组size26) 比较 //遍历的方法:
// 根据str.length() charAt(i)得到对应char
// 转成chars[] s.toCharArray() 再用foreach语句/for获取
// //四步:1.确认题意 2.多种情况 3.写代码。4.测试

solution1 数组1

//时间复杂度为n
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
char[] chars = s.toCharArray();
char[] chart = t.toCharArray();
int[] counter = new int[26];
for (char r1 :chars) {
counter[r1-'a']++;
}
for (char r2 :chart) {
counter[r2-'a']--;
}
for (int count : counter){
if (count != 0) {
return false;
}
}
return true;
}
}
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
int[] counter = new int[26];
for (int i = 0;i < s.length();i++) {
counter[s.charAt(i) - 'a'] ++;
counter[t.charAt(i) - 'a'] --;
}
for (int count : counter){
if (count != 0) {
return false;
}
}
return true;
}
}

solution2 排序

//时间复杂度为NlogN
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
char[] chars = s.toCharArray();
char[] chart = t.toCharArray();
Arrays.sort(chars);
Arrays.sort(chart);
return Arrays.equals(chars,chart);
}
}

49. 字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]

输出:

[

["ate","eat","tea"],

["nat","tan"],

["bat"]

]

说明:

所有输入均为小写字母。

不考虑答案输出的顺序。

//暴力法,遍历数组,排序/统计后进行比较
//哈希表进行保存
//二维数组可以用map转化
//ArrayList 动态数组

solution 排序

//时间复杂度 nKlogK
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs.length == 0) return new ArrayList();
Map<String,List> ans = new HashMap<>();
for (String s : strs) {
char[] chars = s.toCharArray();
Arrays.sort(chars);
String key = String.valueOf(chars);//排序后取str当key
if (!ans.containsKey(key)) {
ans.put(key,new ArrayList()); //没有出现过,则新建对应的key
}
ans.get(key).add(s);
}
return new ArrayList(ans.values());
}
}

solution 统计

class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs.length == 0) return new ArrayList();
Map<String,List> ans = new HashMap<>();
int[] counter = new int[26];
for (String s : strs) {
Arrays.fill(counter, 0);
for (char c : s.toCharArray()) {
counter[c-'a']++;
}
StringBuilder sb = new StringBuilder("");
for (int i = 0;i<26;i++){
sb.append('$');
sb.append(counter[i]);
}
String key = sb.toString();//统计后取str当key
if (!ans.containsKey(key)) {
ans.put(key,new ArrayList()); //没有出现过,则新建对应的key
}
ans.get(key).add(s);
}
return new ArrayList(ans.values());
}
}
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs.length == 0) return new ArrayList();
Map<String,List> ans = new HashMap<>(); for (String s : strs) {
int[] counter = new int[26];
for (char c : s.toCharArray()) {
counter[c-'a']++;
}
String key = Arrays.toString(counter);;//统计后取str当key
if (!ans.containsKey(key)) {
ans.put(key,new ArrayList()); //没有出现过,则新建对应的key
}
ans.get(key).add(s);
}
return new ArrayList(ans.values());
}
}

LeetCode 哈希表、映射、集合篇(242、49)的更多相关文章

  1. 2017年11月4日 vs类和结构的区别&哈希表&队列集合&栈集合&函数

    类和结构的区别 类: 类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在栈上分配(虽然栈的访问速度比 ...

  2. HashSet集合存储数据的结构(哈希表)-Set集合存储元素不重复的原理

    HashSet集合存储数据的结构(哈希表) 在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等 ...

  3. leetcode.哈希表.594最长和谐子序列-Java

    1. 具体题目: 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1.现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5 ...

  4. LeetCode 哈希表 380. 常数时间插入、删除和获取随机元素(设计数据结构 List HashMap底层 时间复杂度)

    比起之前那些问计数哈希表的题目,这道题好像更接近哈希表的底层机制. java中hashmap的实现是通过List<Node>,即链表的list,如果链表过长则换为红黑树,如果容量不足(装填 ...

  5. LeetCode哈希表

    1. Two Sum https://leetcode.com/problems/two-sum/description/ 不使用额外空间需要n*n的复杂度 class Solution { publ ...

  6. Map - leetcode [哈希表]

    149. Max Points on a Line unordered_map<float, int> hash 记录的是斜率对应的点数 unordered_map<float, i ...

  7. leetcode.哈希表.128最长连续序列-Java

    1. 具体题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 ...

  8. HashSet集合存储数据的结构(哈希表)和Set集合存储㢝不重复的原理

    HashSet集合存储数据的结构(哈希表) Set集合存储㢝不重复的原理 前提:存储的元素必须重写hashCode方法和equals方法

  9. LeetCode刷题总结-哈希表篇

    本文总结在LeetCode上有关哈希表的算法题,推荐刷题总数为12题.具体考察的知识点如下图: 1.数学问题 题号:149. 直线上最多的点数,难度困难 题号:554. 砖墙,难度中等(最大最小边界问 ...

  10. leetcode 刷题(数组篇)1题 两数之和(哈希表)

    题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元 ...

随机推荐

  1. HBuilderX内置终端无法使用不能输入

    找到HBuilderX的目录打开plugins\builtincef3terminal\script找到main.js用记事本或其他什么打开他 把这部分代码替换成这个再重启hbuilderX就可以了 ...

  2. VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)

    账号秘密都对,但是缺登录不成功的问题 诀窍可能是: 在属性设置中把LeetCode版本改成cn.点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可. 大 ...

  3. 如何避免JavaScript中的内存泄漏?

    前言 过去,我们浏览静态网站时无须过多关注内存管理,因为加载新页面时,之前的页面信息会从内存中删除. 然而,随着单页Web应用(SPA)的兴起,应用程序消耗的内存越来越多,这不仅会降低浏览器性能,甚至 ...

  4. OpenWrt主题在菜单中不显示

    问题: 路径中有对应的主题,但是make menuconfig中不显示 原因: 需要建立软连接 1. 在路径 SDK-DR232-20221220/package/feeds/luci 中运行 ls ...

  5. QT编程过程中遇到的问题

    QT编程过程中遇到的问题 (一)QT卡死 (二)mingw转msvc编码问题 (三)内存泄漏问题 1. vld检查内存泄漏问题 2. QTextEdit造成内存泄漏 (end)后面会更新 (一)QT卡 ...

  6. 生产真实案例:震惊,几条SQL把服务器干崩了,事后还大言不惭!

    大家好,我是冰河~~ 今天跟大家分享一个发生在今天凌晨的真实案例,这篇文章也是我事后临时写出来的,处理事情的过程有点无语,又有点气愤! 事件背景 事情的背景是这样的:一个朋友今年年初新开了一家公司,自 ...

  7. 混合应用与Hybrid App开发上架流程透析

    Hybrid App(混合 App)已经成为大家接触最为广泛的 App 形式,不管是我们用到的微信.支付宝还是淘宝.京东等大大小小的应用都非常热衷于Hybrid App 带来的研发效率提升和灵活性. ...

  8. L2-033 简单计算器

    #include <bits/stdc++.h> using namespace std; int cal(int a, int b, char c) { int t; if (c == ...

  9. Linux TTY/PTS

    转载:https://segmentfault.com/a/1190000009082089 当我们在键盘上敲下一个字母的时候,到底是怎么发送到相应的进程的呢?我们通过ps.who等命令看到的类似tt ...

  10. 海康单筒红外相机SDK调用方法

    目录 配置环境 1.准备文件 2.配置 3.路径 程序 1.错误警告 2.导入头文件: 3.修改SDK 配置环境 1.准备文件 通过VS创建空白项目后,将海康SDK文件夹: CH-HCNetSDKV6 ...