LeetCode.242 有效的字母异位词
题目描述:
242. 有效的字母异位词 - 力扣(LeetCode) (leetcode-cn.com)
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例一
输入: s = "anagram", t = "nagaram"
输出: true
示例二
输入: s = "rat", t = "car"
输出: false
提示:
- 1<=s.length,t.length<=5∗1041 <= s.length, t.length <= 5 * 10^41<=s.length,t.length<=5∗104
s
和t
仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路分析
排序
由题目可知,若两个string是异位词,则他们包含的字母是相等的,只是顺序不同而已,所以我们字符串转数组然后排序就行了~
AC代码
class Solution {
fun isAnagram(originString: String, destString: String): Boolean {
if (originString.length != destString.length) return false
val originCharArray = originString.toCharArray()
val destCharArray = destString.toCharArray()
originCharArray.sort()
destCharArray.sort()
return originCharArray.contentEquals(destCharArray)
}
}
哈希表
用哈希表的话解法有好几种,说个简单的,由题目可知,若两个string是异位词,则他们包含的字母是相等的,所以我们只要统计出string中各个字母的个数存到哈希表中,然后比较下两个哈希表就行了~
AC代码
class Solution {
fun isAnagram(s: String, t: String): Boolean {
var m1 = mutableMapOf<Char,Int>()
var m2 = mutableMapOf<Char,Int>()
s.toCharArray().forEach{
var value=m1[it]?:0
m1[it] = ++value
}
t.toCharArray().forEach{
var value=m2[it]?:0
m2[it] = ++value
}
return m1==m2
}
}
这是2个维护2个哈希表的情况,还可以维护一个哈希表,第一个让里面加,第二个减,如果是异位词,那么最后这个哈希表肯定是空的~,这个也比较简单,代码就不贴了。
总结
这题还是比较简单的,一遍AC,但是这题有个进阶问题,需要了解 Unicode
相关编码的问题,这个解法等我研究下再来补充。
参考
转载自:https://juejin.cn/post/6995869290884759566