Golang leetcode242有效字符异位词 哈希表map 排序
2024-01-07 17:47:31
    		有效的字母异位词 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
}
使用字符排序的方式
直接比较排序过后的字符串是否相同
部分相关知识回忆:
string转slice:
- []byte(s)
- copy(dst []Type, src []Type)
byte用rune替代也可以。byte是int8;rune是int32,用来表示unicode字符编码,索引一个字符
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
}
    			文章来源:https://blog.csdn.net/kingsill/article/details/135441690
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!