题目

给定两个字符串 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 仅包含小写字母

解答

  1. 暴力解法,用C++实现

主要思路:首先对两个字符串的长度进行比较,若不一致则返回false,接下来,因为字符串的字母共有26个,因此遍历统计字符串中每个字母的个数,并用一个大小为26的对应数组进行存储,最后遍历对比两个字符串对应的统计个数的数组是否一致,对比的结果即为最终结果,代码如下:

class Solution {
public:
    bool isAnagram(string s, string t) {
        //对每个字符串的字母个数统计数组的初始化
        int arr_s[26] = {0};
        int arr_t[26] = {0};
        //计算两个字符串的长度,如果长度不同,那么一定不是字母异位词
        int len_s = s.length();
        int len_t = t.length();
        if(len_s != len_t)
        {
            return false;
        }
        //在遍历中确定每个字母统计的下标,并且+1
        for(int i = 0; i < len_s; i++){
            int index_s = (int)(s[i] - 'a');
            int index_t = (int)(t[i] - 'a');
            arr_s[index_s] = arr_s[index_s] + 1;
            arr_t[index_t] = arr_t[index_t] + 1;
        }
        //对比两个字符串的字母的种类和个数是否一致
        for(int i = 0; i < 26; i++){
            if(arr_s[i] != arr_t[i])
                return false;
        }
        //最终返回结果
        return true;
    }
};