LeetCode242. 有效的字母异位词

242. 有效的字母异位词

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

**注意:**若 st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st 仅包含小写字母
解法

方法一:用两个数组统计各个字母出现的次数,最终将两个数组对比即可。

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.size()!=t.size()) return 0;
        //建立字母数组
        int a[26];
        int b[26];
        //初始化
        for(int i = 0; i < 26; i++){
            a[i] = 0;
            b[i] = 0;
        }
        //遍历
        for(int i = 0; i < s.size() && i < t.size(); i++){
            a[s[i]-'a']++;
            b[t[i]-'a']++;
        }
        //比较两数组
        for(int i = 0; i < 26; i++){
            if(a[i]!=b[i])   return 0;    
        }
        return 1;
    }
};

方法二:用一个数组就行,即先统计s中各个字母的个数,然后统计t的时候在s的字母哈希表基础上减,如果最后这个哈希表不是所有元素都为0的话则return false。

class Solution {
public:
    bool isAnagram(string s, string t) {
       int num[26] = {0};
       for(int i = 0; i < s.size(); i++){
           num[s[i]-'a']++;
       }
       for(int i = 0; i < t.size(); i++){
           num[t[i]-'a']--;
       }
       for(int i = 0; i < 26; i++){
           if(num[i] != 0) return 0;
       }
       return 1;
    }
};

你可能感兴趣的:(Leetcode刷题,leetcode,算法,数据结构)