242. 有效的字母异位词-Java
242. 有效的字母异位词
题目概述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = "anagram", t = "nagaram"
输出: true
示例 2:输入: s = "rat", t = "car"
输出: false提示:1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
算法思路:
1. 哈希表
先判断两字符串是否相等
如果不等,则字符出现次数必定不同
如果相等,则先将其中的一个字符串的字符加入到哈希表,并记录次数
遍历另一个字符串的字符,同时判断哈希表中是否有相同的字符
如果没有相同的字符,则不为有效的字母异位词
如果有相同的字符,则自减次数,同时判断是否减至0
如果减到0,则移除对应的字符
如果没有减到零,则遍历继续
成功遍历字符串则说明两个字符串为字母异位词
代码实现:
public boolean isAnagram_1(String s, String t) {Map<Character,Integer> hashMap = new HashMap<>(26);if(s.length() != t.length()){return false;}else{for(Character character : s.toCharArray()){hashMap.put(character,hashMap.getOrDefault(character,0) + 1);}for(Character character : t.toCharArray()){Integer count = hashMap.get(character);if(count == null){return false;}else if(count > 1){hashMap.put(character,--count);}else{hashMap.remove(character);}}return true;}}
复杂度分析:
- 时间复杂度:O(n), n为s的长度
- 空间复杂度:O(S), S为字符集大小
2.数组
同哈希表前两个步骤
建立一个容量为26的数组
假设从数组的第0位开始为字母a,第1位为字母b,以该规律约定数组
遍历第一个字符串,出现一个字符,则将数组对应的字母位置自增
遍历第二个字符串,出现一个字符,则将数组对应的字母位置自减
若数组对应的字母位置小于0,则返回false
成功遍历第二个字符串后,返回true
代码实现:
public boolean isAnagram_2(String s, String t){int[] counts = new int[26];int length_s = s.length();int length_t = t.length();char[] chars_s = s.toCharArray();char[] chars_t = t.toCharArray();if(length_s != length_t){return false;}for(int i = 0; i < length_s; i++){counts[chars_s[i] - 'a']++;}for(int i = 0; i < length_t; i++){counts[chars_t[i] - 'a']--;if(counts[chars_t[i] - 'a'] < 0){return false;}}return true;}
复杂度分析:
- 时间复杂度:O(n), n为s的长度
- 空间复杂度:O(S), S为字符集大小
3.排序
- 先排序
- 按照顺序同时遍历两个数组,判断字符完全是否一致
- 如果不同,则返回false
- 如果相同,则返回true
代码实现:
public boolean isAnagram_3(String s, String t){int length_s = s.length();int length_t = t.length();if(length_s != length_t){return false;}char[] chars_s = s.toCharArray();char[] chars_t = t.toCharArray();Arrays.sort(chars_s);Arrays.sort(chars_t);return Arrays.equals(chars_s,chars_t);}
复杂度分析:
- 时间复杂度:O(nlog n), n为s的长度
- 空间复杂度:O(log n), S为字符集大小
242. 有效的字母异位词-Java相关推荐
- 力扣242.有效的字母异位词(Java语言,排序法、散列表法)
题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词. 解题思路: 思路1: ...
- Java实现 LeetCode 242 有效的字母异位词
242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...
- 小白刷代码随想录day6 -- 242.有效的字母异位词,349.两个数组的交集,202快乐数,1.两数之和
今天是刷代码随想录的day6.昨天day5元宵节休息日.今天开始了哈希表部分.对于哈希表的内容之前没有怎么学习过,所以今天的刷题主要以学习方法为主.待二刷的时候争取能够手撕代码! 哈希法 首先一个大前 ...
- LeetCode Algorithm 242. 有效的字母异位词
242. 有效的字母异位词 Ideas 对于Python来说,直接创建两个计数器,然后判断计数器是否相等就OK了. 对于C++来说,对两个字符串进行排序,然后逐位对比. Code C++ 原来std的 ...
- 242. 有效的字母异位词 golang
242. 有效的字母异位词 两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram) 思路 字符转换成byte byte排序 byte挨个对比 // 两个单词如果包含相同的字母,次序不 ...
- 高频算法面试题(字符串) 242. 有效的字母异位词
leetcode 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", ...
- LeetCode 242. 有效的字母异位词 (计数排序思想字符处理)
242. 有效的字母异位词 题意: 任意给定两个单词字符串,判断这两个字符串是否是字母异位词 思路: 先判断字符串长度是否相等 将s字符串每个字母映射到数组中,在对应位置++ 将t字符串每个字母映射到 ...
- Day 06 | 242.有效的字母异位词 349. 两个数组的交集 202.快乐数 1. 两数之和
这四道题之前都做过!比第一次顺利一些,不过还是得看题解,磕磕绊绊的.不过我相信坚持下去一定会越来越好滴! 242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 ...
- LeetCode 242. 有效的字母异位词【哈希表】
242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词. 示例 ...
最新文章
- 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述
- Tomcat方面的知识点
- plsqlfor循环输出三角形_glium指南-03-移动我们的三角形
- CentOS Squid
- item-设置可见性
- element-ui表单验证:用户名、密码、电话、邮箱
- 最新ui设计趋势_10个最新且有希望的UI设计趋势
- 为什么没有普及128位操纵系统的计算机?
- 单因素方差分析graphpad_【SPSS】单因素方差分析(比较均值gt;单因素ANOVA)
- Ubuntu18.04修改软件源
- PS 把两张图片融合为一张
- 使用AccessibilityService(无障碍服务)自动完成手机设置功能
- 如何使用图片自定义和装饰您的QR码
- 利用js实现手机访问PC端直接跳转wap端
- 什么是深度学习、强化学习
- Kappa(cappa)系数只需要看这一篇就够了,算法到python实现
- Windows10和Ubuntu双系统如何卸载Ubuntu系统
- HTML特殊转义字符 Javascript转义字符
- 据说看完这21个故事的人,30岁前都成了亿万富翁
- 【CSS】PhotoShop 切图 ② ( PhotoShop 切片选择工具 | 清除切片 | 新建基于图层的切片 | 透明背景图片切图 | 根据参考线选择切片 )