Golang leetcode242有效字符异位词 哈希表map 排序

有效的字母异位词 leetcode242

普通的使用map表进行记录的方法

由于题目规定只有26个小写的英文字符,因此我们直接建立26容量的map

func isAnagram(s string, t string) bool {
	//创建储存记录的map表
	sTable := make(map[int32]int, 26)
	tTable := make(map[int32]int, 26)

	//每次遍历到记录个数+1
	for _, val := range s {
		sTable[val]++
	}
	for _, val := range t {
		tTable[val]++
	}

	//如果字母个数都不一样,不是字母异位词
	if len(sTable) != len(tTable) {
		return false
	}

	//比较两个记录表是否相同
	for i, _ := range sTable {
		if sTable[i] != tTable[i] {
			return false
		}
	}
	return true

}

  • 改进后,只建立一个map表
func isAnagram(s, t string) bool {
    var c1, c2 [26]int
    for _, ch := range s {
        c1[ch-'a']++
    }
    for _, ch := range t {
        c2[ch-'a']++
    }
    return c1 == c2
}

使用字符排序的方式

直接比较排序过后的字符串是否相同

部分相关知识回忆:

  1. string转slice:

    • []byte(s)
    • copy(dst []Type, src []Type)

    byte用rune替代也可以。byte是int8;rune是int32,用来表示unicode字符编码,索引一个字符

  2. sort函数

func Slice(x any, less func(i int, j int) bool).

时间复杂度O(nlog(n)),空间复杂度O(logn)

本题中使用的即为ascending order,在后面的函数中进行规则指定.

sort.slice必须传入slice,否则进行报错,所以对字符串需要进行转化

// 排序方法
func isAnagram(s string, t string) bool {
	//StringToSlice
	S := []rune(s)
	T := []rune(t)

	//进行排序
	sort.Slice(S, func(i, j int) bool {
		return S[i] < S[j]
	})
	sort.Slice(T, func(i, j int) bool {
		return T[i] < T[j]
	})

	//比较排序后字符串是否相同
	if string(S) == string(T) {
		return true
	}
	return false
}

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值