[每日一题]242. valid-anagram(字典)

2019-04-10  本文已影响0人  何学诚
1.这是一道判断两个字符串是否为同元素(打乱顺序)的题目。

链接:https://leetcode.com/problems/valid-anagram/

242-valid-anagram.JPG

这题的做法有两种,
第一种:首先将字符串转换成list,然后进行排序。判断两个list是否相同。O(n)=nlog(n) .(快排)
第二种:
1.建立一个存放26个字母的list,并将它们值初始化为0;
2.遍历两个字符串,如果在s中有,就对这个list的这个位置加一,如果l中就减一;
3.最后判断list中的值是否全为0。

2.题解:

方法一:

class Solution(object):
    # 1.首先将字符串转换成list,然后进行排序.O(n)=nlog(n) 花在快排上了.
    def isAnagram(self, s, t):
        if len(s) != len(t):
            return False
        # 1.转为list
        L_s = list(s)
        L_t = list(t)
        # 2.对两个list排序
        L_s.sort()
        L_t.sort()
        # 3.判断两个list是否相同
        if L_s == L_t:
            return True
        else:
            return False

方法二:

class Solution(object):
    # 时间复杂度是两个for循环.O(n)=2n
    def isAnagram(self, s, t):
        if len(s) != len(t):
            return False
        # 1.建立空list
        L = [0]*26
        # 2.根据s和t,对list的值进行加减
        for i in range(len(s)):
            ascii_s = ord(s[i])-ord('a')
            ascii_t = ord(t[i]) - ord('a')
            L[ascii_s] += 1
            L[ascii_t] -= 1
        # return False for i in range(26) if L[i] != 0
        # 3.判断是否全为0
        for i in range(26):
            if L[i] != 0:
                return False
        return True
3.完整代码

查看链接:
https://github.com/Wind0ranger/LeetcodeLearn/blob/master/4-dict/242-valid-anagram.py

上一篇下一篇

猜你喜欢

热点阅读