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

示例 1:

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

示例 2:

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

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

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

思路1:

/*** 先转成整数数组,然后排序,然后挨个字符对比* 时间复杂度O(nlog(n))* 空间复杂度O(n)* @param s* @param t* @return*/public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}int[] a = new int[s.length()];int[] b = new int[t.length()];for(int i=0;i<s.length();i++) {a[i] = s.charAt(i);}for(int i=0;i<t.length();i++) {b[i] = t.charAt(i);}Arrays.sort(a);Arrays.sort(b);for(int i=0;i<s.length();i++) {if(a[i] != b[i]) {return false;}}return true;}

思路2:对思路1进行优化,直接对字符数组进行排序

public boolean isAnagram:(String s, String t) {if(s.length() != t.length()) {return false;}char[] a = s.toCharArray();char[] b =t.toCharArray();Arrays.sort(a);Arrays.sort(b);for(int i=0;i<s.length();i++) {if(a[i] != b[i]) {return false;}}return true;}

思路3:不排序,统计字母出现次数

public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}Map<Character, Integer> mapS = new HashMap<Character, Integer>();Map<Character, Integer> mapT = new HashMap<Character, Integer>();for(char c:s.toCharArray()) {mapS.put(c, mapS.get(c) == null?1:mapS.get(c) +1);}for(char c:t.toCharArray()) {mapT.put(c, mapT.get(c) == null?1:mapT.get(c) +1);}if(mapS.size() != mapT.size()) {return false;}for(char c :mapS.keySet()) {if(!mapT.containsKey(c) || mapT.get(c).intValue() != mapS.get(c).intValue()) {return false;}}return true;}

思路4,使用字母表存储(当前最优)

/*** 思路4:思路3优化版:使用字母表存储* 时间复杂度O(nlog(n))* 空间复杂度O(n)* @param s* @param t* @return*/public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}int[] si = new int[26];int[] ti = new int[26];for(char c:s.toCharArray()) {si[c-'a']++;}for(char c:t.toCharArray()) {ti[c-'a']++;}for(int i=0;i<26;i++) {if(si[i] != ti[i]) {return false;}}return true;}

5、思路5,使用类库,缩短代码

public boolean isAnagram(String s, String t) {if(s.length() != t.length()) {return false;}char []a = s.toCharArray();char[]b = t.toCharArray();Arrays.sort(a);Arrays.sort(b);return String.valueOf(a).equals(String.valueOf(b));}

2019-03-18-算法-进化(有效的字母异位词)相关推荐

  1. 算法训练Day6:有效的字母异位词, 两个数组的交集,快乐数,两数之和

    文章目录 有效的字母异位词 自己题解 其他参考 两个数组的交集 题解(重点在熟悉set的一些操作以及使用场景) 快乐数 两数之和 题解(这道题还是比较难的) 有效的字母异位词 Category Dif ...

  2. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  3. 代码随想录算法训练营第六天|242. 有效的字母异位词,349. 两个数组的交集,202.快乐数,1. 两数之和

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

  4. 算法--------字母异位词分组 (Java 版本)

    题目 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串.示例:输入: ["eat", "tea", &quo ...

  5. Leetcode算法题(C语言)16--有效的字母异位词

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

  6. day6代码随想录算法训练营| ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

    ● 242.有效的字母异位词 用map的话效率应该会很低吧,特别是查询全部value class Solution { public:bool isAnagram(string s, string t ...

  7. 1.字母异位词分组(LeetCode第49题)

    一.题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...

  8. LeetCode 49字母异位词分组50pow(x,n)51八皇后

    原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...

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

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

最新文章

  1. Flutter 布局控件完结篇
  2. 大数据处理——Hadoop解析(一)
  3. mysql 多列索引的生效规则
  4. c语言 12大于12么,【C语言】第十二章
  5. noip2012-day2-t2
  6. 中班音乐活动 机器人_幼儿园中班音乐活动教案《机器人》
  7. 连锁零售行业ERP解决方案
  8. 错过了多次捞钱的机会
  9. https协议为什么比http协议更加安全
  10. Vue项目实战:电商后台管理系统(Vue+VueRouter+Axios+Element)
  11. 更改计算机账户类型,win10系统无法更改账户类型的两种解决方案
  12. php实现室内地图导航,概述-室内地图 JS API | 高德地图API
  13. 【Android Studio】Android Monitor找不到手机问题-无法显示运行程序问题解决
  14. 用一张PPT让面试官在100个人里面记住你
  15. 厦门故事(二):这是我第一次发现,原来风声可以这么好听
  16. MySQL 8.0 物理备份xtrabackup简介
  17. 多个div占满整个屏幕(或页面)(待补充及理解)
  18. P1293 班级聚会
  19. 超硬核,Nacos实现原理详细讲解
  20. Android超级炫酷的轮播图实现

热门文章

  1. 什么叫一年有四季......
  2. 忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...
  3. 在床上玩手机,千万不能把手机放下!
  4. 10分钟让你快速掌握Excel的16项重要技巧
  5. Spark ML - 协同过滤
  6. java中可以用浮点作为循环变量吗_Java千问:Java循环语句的几个冷门知识点你都知道吗?...
  7. asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格
  8. python引用numpy出错_使用numpy时出错
  9. java sorted_Java记录 -59- SortedSet
  10. mysql 5.7.17 源码安装_mysql5.7.17源码安装