leetcode刷题记录之242

242、有效的字母异位词

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

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

示例 2:

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

说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

难度:简单  题目地址:https://leetcode-cn.com/problems/valid-anagram/

1、C语言代码:

//解法一
int inc (const void * a,const void *b){
    return * (char * )a-* (char *)b;
}
bool isAnagram(char * s, char * t){
    int c1=0,c2=0;
    for(int i=0;s[i]!='\0';i++){
        c1++;
    }
    for(int i=0;t[i]!='\0';i++){
        c2++;
    }
    qsort(s,c1, sizeof(char), inc);
    qsort(t,c2, sizeof(char), inc);
    if(c1!=c2)
        return  false;
    else
        for(int i=0;i<=c1;i++){
            if(s[i]!=t[i])
                return false;
        }
    return true;
}
//解法二
bool isAnagram(char * s, char * t){
    int n=strlen(s),m=strlen(t);
    if(n!=m)
        return false;
    int a[26]={0};
    for(int i=0;i<n;i++){
        a[s[i]-'a']++;
        a[t[i]-'a']--;
    }
    for(int i=0;i<26;i++)
        if(a[i]!=0)
            return false;
    return true;
}

解释: 解法一:排序。通过将 s 的字母重新排列成 t 来生成变位词。因此,如果 T 是 S 的变位词,对两个字符串进行排序将产生两个相同的字符串。此外,如果 s 和 t 的长度不同,t 不能是 s 的变位词,我们可以提前返回。
解法二:先判断两字符串长度是否相等,若不相等则false,若相等则将两字符串中每种字母的个数做差,若结果为0则true,不为0则false。

知识点回顾: 无。

2、Java代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] counter = new int[26];
        for (int i = 0; i < s.length(); i++) {
            counter[s.charAt(i) - 'a']++;
            counter[t.charAt(i) - 'a']--;
        }
        for (int count : counter) {
            if (count != 0) {
                return false;
            }
        }
        return true;
    }
}

解释:

  • 为了检查 t 是否是 s 的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 S 和 T 都只包含 A−Z 的字母,所以一个简单的 26 位计数器表就足够了。
  • 我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 s 字母的频率,用 t 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。

知识点回顾: 哈希表的相关知识。

3、Python代码:

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return sorted(s) == sorted(t)

解释: 类似于C语言的解法一。

知识点回顾: 无。

4、JavaScript代码:

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if (s.length !== t.length) return false
    return s.split('').sort().join('') === t.split('').sort().join('')
};

解释: 类似于C语言的解法一。

知识点回顾: 无。

你可能感兴趣的:(算法刷题)