前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >寻找组成字母相同的单词

寻找组成字母相同的单词

作者头像
四火
发布2022-07-15 20:06:02
5080
发布2022-07-15 20:06:02
举报
文章被收录于专栏:四火的唠叨四火的唠叨

这篇文章是对这个帖子的汇总,帖子里的答复都很有意思,真希望 ITEye 多一些这样的帖子,少一些浮躁和毫无意义的争论。

我把帖子汇总贴在下面:

Write a function that takes as input list of words and prints out groups of words with exactly the same letters, one group per line. For example, Given the list: hat, top, potter, pot, pier, ripe It would print: hat top, pot potter, pier, ripe Since ‘pier’ and ‘ripe’ each have one p, i, e, and r they belong on the same line. Since no other word has the same 6 letters as ‘potter’ it belongs on a line by itself. Note: The order of the lines does not matter. As long as all words that belong on the same line are grouped together the function is correct. Please use the following function signature: void PrintGroupsWithSameLetters(string[] words)

我首先想到的问题解决办法和二楼一样:

构造一个 map,key 为升序拍好的字母串,value 就是出现的单词。

可是,这样多做了一件事。

对,就是给每个单词排序。这件事能否不做?

是不是可以给每一个字母一个编码,让不同字母组合的编码和不相同?后面有同学有类似的思路,回答道:

每个字母对应一个素数, 然后把所有单词响应的素数相乘,然后把结果做比较,结果相同的,说明这个单词和另一个单词有相同的字母。

当然了,素数乘积的办法遭到了驳斥:

不建议用素数乘积做,我之前也想过了这个问题。 比如说一个单词 ZZZZZZ = (101)..101> 2 的 6 次方*….. >2 的 36 次方 想想就知道,这超过了 int 的 32 位。

还没完,之后又有同学有想到:

现根据字符串长度进行分组, 然后再对字符串进行排序。 大体为第一步:归类(长度相等的一类)第二步:给每个分组中的字符串排序再归类。

呵呵,有点 MapReduce 的意思哦。

既然提到了映射和化简,那就有可以改进的地方,比如可以按照 HashCode 的特性来分类。后面还有用二进制数移位等等办法的讨论,实现代码也是 Python、Java、Erlang、Groovy 等等花样百出。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档