LeetCode 242. 有效的字母异位词

发布时间 2023-05-07 17:36:33作者: 小星code

题目链接:LeetCode 242. 有效的字母异位词

题意:

本题是要判断两个字符串 s 和 t,是否是字母异位词,所谓字母异位次就是 如果 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

解题思路:

首先我们很容易想到,最简单的思路就是先遍历一遍s字符串,统计出每个字母出现的次数,然后同样的遍历t字符串,统计出每个字母出现的次数,

最后判断两个字符串中,每个字母出现的次数是否是相同的。

代码如下:

func isAnagram(s string, t string) bool {
 
    if len(s)!=len(t){
        return false
    }
    ss:=make([]int,26)
    tt:=make([]int,26)

    for i,_:=range s{
        ss[s[i]-'a']++
    }
    for i,_:=range t{
        tt[t[i]-'a']++
    }
   
    for i:=0;i<26;i++{
        if ss[i]!=tt[i]{
            return false
        }
    }
    return true

}

其实上面代码看着比较啰嗦,由于字母总共也就是26个小写字母,因此只用一个数组来记录每个字母出现的次数即可,

代码如下:

func isAnagram(s string, t string) bool {

    //遍历s,每出现一个字母,对应的值+1,
    //遍历t,每出现一个字母,对应的值-1,
    //原数组是否恢复到声明时的状态。
    // 最后判断 m 数组如果有的元素不为零0,说明字符串s和t一定是谁多了字符或者谁少了字符,return false。
    // 最后如果 m 数组所有元素都为零0,说明字符串s和t是字母异位词,return true。

    m:=[26]int{}   //用来上记录字符串s里字符出现的次数。
    for i,_ := range s{
         m[s[i]-'a'] ++
    } 
    for i,_ :=range t{
       m[t[i] - 'a']--
    }
    return m == [26]int{}

}