LeetCode 242 . 有效字母的异位词 (C语言)

有效的字母异位词

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

示例 1:

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

示例 2:

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

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

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

解题思路:

通过建立字符串s和t的字符表,进而比较s和t是否是字母异位词。

意思也就是比如 s = "anagram", t = "nagaram",通过定义两个数组x和y,存储字符串s和t中每个字母出现的次数。

这需要先将每个字符转为数字,最好的办法就是通过和‘a’相减的形式转换为两字符ASCII码值的差值,进而存储在数组相应的位置。最后只需要遍历两个数组,比较相应位置上的数字即可。

代码如下:

bool isAnagram(char* s, char* t) {
    
    /*通过建立字符串s和t的字符表*/
    if(strlen(s) != strlen(t)) return false;
    
    int i , x[26] = {0}, y[26] = {0};
    
    /*分别建立s和t的字符表*/
    for(i = 0; (s[i] != '\0') && (t[i] != '\0'); i++){
        x[s[i] - 'a']++;    
        y[t[i] - 'a']++;
    }
    /*比较两字符表是否相等*/
    for(i = 0; i < 26; i++){
        if(x[i] != y[i]) return false;
    }
    return true;
}

 

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