p84 有效的字母异位词 (leetcode 242)

一:解题思路

方法一:先对2个字符串进行排序,然后逐一比较他们中的每一个元素,如果不等则返回false。Time:O(n*log(n)),Space:O(n)

方法二:申请一个大小为26的整形数组,s数组统计字母出现的次数,t数组抵消字母出现的次数。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

方法一C++:

//Time:O(n*log(n)),Space:O(1)
class Solution {
public:
    bool isAnagram(string s, string t) 
    {
        if (s.size() == 0 && t.size() == 0) return true;
        if (s.size() == 0 || t.size() == 0 || s.size() != t.size()) return false;
        sort(s.begin(),s.end());
        sort(t.begin(),t.end());
        for (int i = 0; i < s.size(); i++)
            if (s[i] != t[i]) return false;
        return true;
    }
};

方法一Java:

//Time:O(n*log(n)),Space:O(n)
class Solution {
        public boolean isAnagram(String s, String t)
        {
            if(s.length()==0 && t.length()==0) return true;
            if(s==null || t==null || s.length()!=t.length()) return false;
            char[] sc=s.toCharArray();
            char[] tc=t.toCharArray();
            Arrays.sort(sc);
            Arrays.sort(tc);
            for(int i=0;i<sc.length;i++)
                if(sc[i]!=tc[i]) return false;
            return true;
        }
    }

方法二C++:

class Solution {
public:
    bool isAnagram(string s, string t) 
    {
        if (s.size() == 0 && t.size() == 0) return true;
        if (s.size() == 0 || t.size() == 0 || s.size() != t.size()) return false;
        vector<int> count(26,0);
        for (int i = 0; i < s.size(); i++)
        {
            count[s[i] - 'a']++;
            count[t[i] - 'a']--;
        }

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

方法二Java:

class Solution {
        public boolean isAnagram(String s, String t)
        {
            if(s.length()==0 && t.length()==0) return true;
            if(s==null || t==null || s.length()!=t.length()) return false;
            int[] count=new int[26];
            for(int i=0;i<s.length();i++)
            {
                count[s.charAt(i)-'a']++;
                count[t.charAt(i)-'a']--;
            }
            
            for(int i=0;i<26;i++)
                if(count[i]!=0) return false;
            return true;    
        }
    }

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12633928.html