力扣初级算法刷题记录--有效的字母异位词

目录

         字母异位词:

思路:

注意:

代码逻辑问题:

修复过程:

         最终代码:

字母异位词

思路:

      1.判断两个字符串的长度是不是一样

      2.先用一个数据容器存起来A字符串的所有字符,

      再看看有没有存在B中有的字母,A没有的这种情况

     3.处理字母频率

注意:

1.PythonTrueFalse是布尔类型的值,首字母需要大写,否则会报错

2.else后面的

代码逻辑问题:

1.    这个version中如果在else模块中写了return True,这样会导致即使后面存在t字符串中有字符并不在List_A中的情况,也会return True,导致一些不合格的字符串并没有检测出来,因此有部分案例未通过

 List_A=[]
        if len(s)!=len(t):
            return False
        else:
            for char in s:
               List_A.append(char)
            for char in t:
                if char not in List_A:
                    return False
                else:
                    return True

2. 字母异位词中相同字母要求出现的频率也一样,以下这段代码只保证了两组的字母个数和字母都是一样的,但没有保证相同字母出现的频率是一样的。如案例 "aacc" "ccac"由于a,c出现的频率不一致,不是字母异位词,但因为缺少判断而误判作True

List_A=[]
        if len(s)!=len(t):
            return False
        else:
            for char in s:
               List_A.append(char)
            for char in t:
                if char not in List_A:
                    return False
                else:
                    pass
            return True

修复过程:

1.   不再把列表初始化为空  List_A=[ ],然后再通过append()方法添加列表元素,而是直接把字符串s转化转化为字符列表 即 List_A=list(s)

2.  字符频率的处理:这里通过remove()函数原地改变列表,移除数据容器List_A的元素筛选出频率一致的词。

个人理解可以认为其是一种抵消,如果满足字母异位词的条件,List_A最终应该被抵消完全。 如果还有剩下的,说明是多余出来的字母,恰好证明频率不一致。

3.遍历t字符串的过程中,if 代码块修改为字符在List_A中的情况

4.字母出现频率一致是比char  in List_A更强的条件

5.报错代码:return False去掉return

return True if not List_A else return False

6.将s字符串转化为列表直接写

List_A=list(s)

无需写遍历

for char in s:
               List_A=list(s)

最终代码:

class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if len(s)!=len(t):
            return False
        else:
            List_A=list(s)
            for char in t:
                if char in List_A:
                    List_A.remove(char)
                else:
                   return False
            return True if not List_A else  False
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值