leetcode刷刷题(53) ---- 有效的字母异位词(C语言版)

2020-7-28

  • 保守秘密的最好方式就是从来不知道这个秘密。
    – 维基解密创始人 朱利安.阿桑奇

题目

  • leetcode – 242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

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

示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

个人解答:(C版本)

  • 很容易想到暴力破解来实现。
  • 但是看到说明 “你可以假设字符串只包含小写字母。”这句话,会想到使用一个固定26大小的数组来存储s字符串中出现的字母分别出现的次数,然后循环遍历一下t字符串,每遇到一个字符串,就从刚刚数组对应字母的计数减一。
    最后判断数组是否全为0,则说明两个字符串为字母异位词。
    具体看代码,很简单。
bool isAnagram(char * s, char * t){
    if(s==NULL && t==NULL)
    {
        return true;
    }
    else if(s == NULL)
        return false;
    else if(t == NULL)
        return false;

    int a[26]={0}; // 记得初始化为0,因为局部变量的值是随机的

    for(int i=0; s[i]!='\0'; i++)
        a[s[i]-'a']++;

    for(int i=0; t[i]!='\0'; i++)
        a[t[i]-'a']--;

    for(int i=0; i<26; i++)
    {
        if(a[i] != 0)
            return false;
    }

    return true;
}
  • 复杂度分析
    1)时间复杂度:需要遍历2次,O(2N) = O(N)。
    2)空间复杂度:只用到一个固定大小的数组,所以为O(1)。
  • 运行结果:
    leetcode刷刷题(53) ---- 有效的字母异位词(C语言版)_第1张图片
他山之石:

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