A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

淡淡丶TK

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

本帖最后由 淡淡丶TK 于 2018-8-2 21:39 编辑

这题的题目是

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



给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[  ["ate","eat","tea"],  ["nat","tan"],  ["bat"]]
说明:
  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

最开始我的做法是用字符串进行遍历来做,先将列表做一个复制,然后将里面所有的字符串重新排序来对比相同性
后来我这个做法因为耗时太长导致了无法通过,然后我就找到了字符串和列表的一个方法来做,如下
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
list_outside = []
    for i in strs:
        list_inside = list(i)
        list_inside.sort()
        list_outside.append(("".join(list_inside)))

通过list()这个方法可以得到一个列表
然后.join就可以将一个列表直接连接成一个字符串
就可以只用一次for循环就可以得到一个可以对比相同性的列表
后面我想到的是用count来遍历每个字符串然后输出对应的数字来对比是否和字符串长度相等
但是因为这个方法会用到多重for循环最后还是应为耗时太多而失败了
后来我想到了一个用字典的方法来接收这个值
来做对比并在符合条件时输出对应的下标
方法如下
list_end = []
dict_1 = {}
for i in range(len(list_outside)):
    if list_outside not in dict_1:
        dict_1[list_outside] = []
    dict_1[list_outside].append(strs)


for key in dict_1:
    list_end.append(dict_1[key])
最后所得到list_end就是所得到结果


总结:
因为可能平时用for循环比较多的情况下会导致自己总习惯使用循环的操作
但是for循环多次嵌套确实会导致运算时间过长
平时还是应该多积累更多的方法来做




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马