leetcode_有效的字母异位词

一、题目

 

 

二、参考代码

  使用两个遍历和一个数组,数组大小为26,用来记录字母出现的次数,这样的想法很好,我当时想的时候,以为所有小写字母数字为24,所以导致内存访问错误。

  参考代码如下:

  

class Solution {
public:
    bool isAnagram(string s, string t) {
        int record[26] = {0};
        for (int i = 0; i < s.size(); i++) {
            // 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
            record[s[i] - 'a']++;
        }
        for (int i = 0; i < t.size(); i++) {
            record[t[i] - 'a']--;
        }
        for (int i = 0; i < 26; i++) {
            if (record[i] != 0) {
                // record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。
                return false;
            }
        }
        // record数组所有元素都为零0,说明字符串s和t是字母异位词
        return true;
    }
};

三、我的思路

   我本来以为是要使用set或者是map,后来发现vector完全可以满足要求,这样看来我的想法还是太过复杂,但是功能基本都已经实现了。但是因为是使用24个大小的字符,所以导致

访问出错。而且查找的时候也不用使用set,因为他们可以做映射,所以直接使用vector就好了,也不用两个vector。

class Solution {
public:
    bool isAnagram(string s, string t) {
        unordered_set<char> dict;
        int length_s = s.size();
        int t_length = t.size();
        //std::cout<<'very good!'<<std::endl;
        if(t_length != length_s){
            return false;
        }
        vector<int> s_num(26, 0);
        vector<int> t_num(26,0);
        //std::cout<<'good!'<<std::endl;
        for(int i=0; i<length_s; i++){
            if(dict.find(s[i]) == dict.end()){
                //不在里面,则读入
                dict.insert(s[i]);
            } 
            s_num[s[i]-'a'] ++;
        }
        //for(int i=0; i<24;i++)
          //  std::cout<<s_num[i]<<std::endl;
        for(int i=0; i<t_length; i++){
            if(dict.find(t[i]) == dict.end())
                return false;
            else
                t_num[t[i] - 'a'] ++;

        }
        //如果两个数组相等
        int flag = 0;
        for(int i=0; i<24; i++){
            if(s_num[i] == t_num[i]){
                flag++;
            }
            else
                return false;
        }
        if (flag==24)
            return true;
        return false;
    }
};

 

posted @ 2021-11-14 20:39  星光夜  阅读(34)  评论(0)    收藏  举报