Leetcode ☞ 242. Valid Anagram ☆

来源:互联网 发布:如何练出完美胸肌知乎 编辑:程序博客网 时间:2024/05/17 04:02

网址:https://leetcode.com/problems/valid-anagram/


242. Valid Anagram

My Submissions
Total Accepted: 62627 Total Submissions: 153094 Difficulty: Easy

Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.

Note:
You may assume the string contains only lowercase alphabets.

Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?



















我的AC(笨):

//ASCII码:0--48  A--65  a--97    范围是0~127。bool isAnagram(char* s, char* t) {    int Hash1[256], Hash2[256], flag = 0;//数组范围128的话会不够    memset(Hash1,0,257 * sizeof(int));    memset(Hash2,0,257 * sizeof(int));        if (strlen(s) != strlen(t))        return false;        while(*s){       Hash1[*s++]++;//*s++:先*s,再s++。       Hash2[*t++]++;    }    for(int i = 0; i < 257 ; i++){        if(Hash1[i] != Hash2[i]){            flag = 1;            break;        }    }    return flag ? false : true;}



讨论区里的很nice的解答,比我的笨方法运算少:

https://leetcode.com/discuss/83342/0ms-fastest-c-solution

bool isAnagram(char* s, char* t) {    if(strlen(s) != strlen(t)) {        return false;    }    int mask[256] = {};    char *c = s;    while(*c) {        mask[*c++]++;    }    c = t;    while(*c) {        if(mask[*c] > 0) {            mask[*c++]--;        } else {            return false;        }    }    return true;}


分析:

1.数组的范围问题:http://blog.sina.com.cn/s/blog_a401a1ea0101fh3z.html

2.注意 *s++的运算顺序:先*s,再s++。“++”作用在地址上,而(*s)++里的“++”是作用在数值上。



python,高级语言真是偷奸耍滑的不行:

class Solution(object):    def isAnagram(self, s, t):        """        :type s: str        :type t: str        :rtype: bool        """        a = list(s)        b = list(t)        c = a.sort()        d = b.sort()                for i,j in zip(c,d):            if i != j:                return False            return True


0 0