题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
1 | 输入: s = "anagram", t = "nagaram" |
示例 2:
1 | 输入: s = "rat", t = "car" |
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
题目链接
题目解答
解法一
排序,拿到一个字符串,先拆分为字符数组,然后对字符排序,之后重新组合成新的字符串,比较两个新字符串的值是否相等即可。
时间复杂度:$O(n\log{}n)$ 空间复杂度:$O(n)$
1 | class Solution { |
执行用时:2 ms, 在所有 Java 提交中击败了99.99%的用户
内存消耗:38.5 MB, 在所有 Java 提交中击败了86.93%的用户
解法二
哈希表,首先字符范围是只包含小写字母,也就是有26个元素,我们可以使用一个长度为26的数组用来统计每个字符出现的次数,对于字符串 s 来说,拿到一个字符,我们对数组下标对应的值加1,对于字符串 t 来说,拿到一个字符,我们对数组下标对应的值减1。统计完成之后,如果两个字符串是异位词,那么数组中所有元素值都应该是0,如果元素值有不为0的情况,则两个字符串不是异位词。
时间复杂度:$O(n)$ 空间复杂度:$O(1)$
1 | class Solution { |
执行用时:5 ms, 在所有 Java 提交中击败了44.43%的用户
内存消耗:38.6 MB, 在所有 Java 提交中击败了69.49%的用户