leetcode刷题_(arr,hashtable)_code49(数组元素归类)

code49: Group Anagrams

Given an array of strings, group anagrams together.

Example:

Input: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Output:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

解答:
1 第一想法,dfs类似的暴力破解,一旦出现不对就排除:
def1:比较元素是否相同(非顺序),如果相同则返回true,反之false
def2:选取res数组,以及即将进入的str 通过调用def1进行比较。如果对,则在该分数组内res[i]进行append。否则直接res.append()该[str]。
def3:进行遍历,input遍历对比res数组元素,每次处理完则再进入下一个str

复杂度比较高 接近O(NNK)
代码:

class Solution:
    def groupAnagrams(self, strs):
        arr = []
        for i in range(len(strs)):
            arr = self.operate_arr(arr, strs[i])

        return arr

    def operate_arr(self, arr, input_str):
        for i in range(len(arr)):
            target = arr[i][0]
            res = self.compare(target, input_str)
            if res:
                arr[i].append(input_str)
                return arr
            else:
                continue
        arr.append([input_str])
        return arr

    def compare(self, b, a):
        if len(a) != len(b):
            return False
        else:
            for i in range(len(a)):
                num = b.find(a[i])
                if num == -1:
                    return False
                else:
                    b = b[:num] + b[num + 1:]
                    #print(num,b)
            return True

理论上是没问题的,但是由于时间复杂度高,最后TLE了。

改进:
将str进行自身排序以后,进入hashtable比较。
如果存在于hahtable,则在相应的res[i]处append。
如果不存在,则直接res.append。
这里使用一个 数组与字符串变化的方法:

''.join(sorted(str_in))

sorted将str_in变为数组,然后使用join再链接为字符串

代码:

class Solution:
    def groupAnagrams(self, strs):
        temp = {}
        res = []
        count = -1
        for i in range(len(strs)):
            e = ''.join(sorted(strs[i]))
            if e in temp.keys():
                x = temp[e]
                res[x].append(strs[i])

            else:
                count += 1
                temp[e] = count
                res.append([strs[i]])
        return res

tips:
1 字符串变数组:
list(in_str)
in_str.split(’ ‘)
in_str.split(’.’)

2 数组变字符串
‘’.join(arr)
’ '.join(arr)
‘.’.join(arr)

3 str一旦确定无法使用s[i]=xxx进行修改

4 二维数组(非numpy)无法进行列的切片。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值