zoukankan      html  css  js  c++  java
  • 字母异位词分组

    题目

    给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

    示例:

    输入: ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ] 说明:

    所有输入均为小写字母。不考虑答案输出的顺序。

    解题思路

    这里要用到查找,我们知道哈希表查找很快,所以想办法构造一个哈希表,我们可以将字符串按ACSII码排序,在通过比较字符串是否相同,这种方法不难想到,接下来主要分享一下评论中看到的一个比较骚的操作。

    **用质数表示26个字母的 ASCII 值 ,把字符串的各个字母相乘,这样可保证字母异位词的乘积必定是相等的。**则可以通过比较乘积判断字符串是否相同。

    代码

    package main
    
    import "fmt"
    
    var dic = map[byte]int{'a': 2, 'b': 3, 'c': 5, 'd': 7, 'e': 11, 'f': 13, 'g': 17, 'h': 19, 'i': 23, 'j': 29, 'k': 31, 'l': 37, 'm': 41,
    'n': 43, 'o': 47, 'p': 53, 'q': 59, 'r': 61, 's': 67, 't': 71, 'u': 73, 'v': 79, 'w': 83, 'x': 89, 'y': 97, 'z': 101,
    }
    
    func groupAnagrams(arr []string) [][]string {
    
    	dictStr := map[int][]string{}
    	var res [][]string
    	for _, str := range arr {
    		m := 1
    		for i := 0; i < len(str); i++ {
    			m = m*dic[str[i]]
    		}
    
    		if dictStr[m] == nil {
    			dictStr[m] = []string{}
    		}
    
    		dictStr[m] = append(dictStr[m], str)
    	}
    
    	for _, v := range dictStr {
    		res = append(res, v)
    	}
    
    	return res
    }
    
    func main() {
    	ss := []string{"eat", "tea", "tan", "ate", "nat", "bat"}
    	res := groupAnagrams(ss)
    	fmt.Println(res)
    }
    

      地址:https://mp.weixin.qq.com/s/77pv5jqfUJN0d69eByNmHg

  • 相关阅读:
    Laravel中Contracts的理解和使用
    laravel 服务容器的用法
    linux 安装go环境
    权限设计-系统登录用户权限设计
    Laravel 中使用 JWT 认证的 Restful API
    使用laravel-wechat微信支付
    composer查看全局配置
    如何在 Laravel 项目中处理 Excel 文件
    laravel各种请求类
    Centos创建用户并授权
  • 原文地址:https://www.cnblogs.com/smallleiit/p/14034138.html
Copyright © 2011-2022 走看看