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相关推荐

  1. 力扣242.有效的字母异位词(Java语言,排序法、散列表法)

    题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词. 解题思路: 思路1: ...

  2. Java实现 LeetCode 242 有效的字母异位词

    242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = " ...

  3. 小白刷代码随想录day6 -- 242.有效的字母异位词,349.两个数组的交集,202快乐数,1.两数之和

    今天是刷代码随想录的day6.昨天day5元宵节休息日.今天开始了哈希表部分.对于哈希表的内容之前没有怎么学习过,所以今天的刷题主要以学习方法为主.待二刷的时候争取能够手撕代码! 哈希法 首先一个大前 ...

  4. LeetCode Algorithm 242. 有效的字母异位词

    242. 有效的字母异位词 Ideas 对于Python来说,直接创建两个计数器,然后判断计数器是否相等就OK了. 对于C++来说,对两个字符串进行排序,然后逐位对比. Code C++ 原来std的 ...

  5. 242. 有效的字母异位词 golang

    242. 有效的字母异位词 两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram) 思路 字符转换成byte byte排序 byte挨个对比 // 两个单词如果包含相同的字母,次序不 ...

  6. 高频算法面试题(字符串) 242. 有效的字母异位词

    leetcode 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", ...

  7. LeetCode 242. 有效的字母异位词 (计数排序思想字符处理)

    242. 有效的字母异位词 题意: 任意给定两个单词字符串,判断这两个字符串是否是字母异位词 思路: 先判断字符串长度是否相等 将s字符串每个字母映射到数组中,在对应位置++ 将t字符串每个字母映射到 ...

  8. Day 06 | 242.有效的字母异位词 349. 两个数组的交集 202.快乐数 1. 两数之和

    这四道题之前都做过!比第一次顺利一些,不过还是得看题解,磕磕绊绊的.不过我相信坚持下去一定会越来越好滴! 242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 ...

  9. LeetCode 242. 有效的字母异位词【哈希表】

    242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词. 示例 ...

最新文章

  1. 标题 穿越雷区 java_【蓝桥杯】穿越雷区-java语言描述
  2. Tomcat方面的知识点
  3. plsqlfor循环输出三角形_glium指南-03-移动我们的三角形
  4. CentOS Squid
  5. item-设置可见性
  6. element-ui表单验证:用户名、密码、电话、邮箱
  7. 最新ui设计趋势_10个最新且有希望的UI设计趋势
  8. 为什么没有普及128位操纵系统的计算机?
  9. 单因素方差分析graphpad_【SPSS】单因素方差分析(比较均值gt;单因素ANOVA)
  10. Ubuntu18.04修改软件源
  11. PS 把两张图片融合为一张
  12. 使用AccessibilityService(无障碍服务)自动完成手机设置功能
  13. 如何使用图片自定义和装饰您的QR码
  14. 利用js实现手机访问PC端直接跳转wap端
  15. 什么是深度学习、强化学习
  16. Kappa(cappa)系数只需要看这一篇就够了,算法到python实现
  17. Windows10和Ubuntu双系统如何卸载Ubuntu系统
  18. HTML特殊转义字符 Javascript转义字符
  19. 据说看完这21个故事的人,30岁前都成了亿万富翁
  20. 【CSS】PhotoShop 切图 ② ( PhotoShop 切片选择工具 | 清除切片 | 新建基于图层的切片 | 透明背景图片切图 | 根据参考线选择切片 )

热门文章

  1. 如何让淘宝客推广我们的产品?
  2. 移动互联网的六大发展趋势
  3. 昨天去看了电影-《达芬奇密码》
  4. 从PAYPAL电汇到中国建设银行过程
  5. hive -e 和hive -f 的注意点 (//和////)
  6. 4. 选股(基金)神器 —— 证券基本分析
  7. 土壤(含水率)监测系统的应用
  8. 回顾与展望 | 2020
  9. 【技术教程】RTMP摄像头如何通过内存卡进行视频录像存储?
  10. 读书笔记——《我们时代的神经症人格》