014字符串中的变位词---2022/03/30

题目描述

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
题目描述

解题思路

首先比较字符长度,如果s2长度小于s1,那么返回false;然后对与s1同长度的子串进行比较,是否出现的字符集及其出现次数是否一致,如果一致,返回true,如果不一致,那么尾指针往后一位,相应头指针也要移动。而后继续判断。

一些收获:
1、理解小括号、中括号、花括号的区别:
小括号:表示元组数据类型,不可变序列。
中括号:表示列表数据类型,可变数列。
花括号:表示字典数据类型。
2、python中,将列表元素转化成字符串或数字的方法(遍历构造字符串, 而后强制转换成数值),python可整个列表进行比较。
3、如果考虑s1中有重复字符,应该如何做提升?(只管做计数)
4、标记字符串出现了哪些字符,需要使用ord函数完成定位转换。

代码实现

class Solution(object):
    def checkInclusion(self, s1, s2):
        """
        :type s1: str
        :type s2: str
        :rtype: bool
        """
        if len(s1) > len(s2): return False
        l1, l2 = len(s1), len(s2)
        temp,cur=[0]*26,[0]*26
        for j in range(l1):
            temp[ord(s1[j])-ord('a')]+=1
            cur[ord(s2[j])-ord('a')]+=1

        if cur == temp: return True
        for i in range(l2 - l1):
            cur[ord(s2[i+l1])-ord('a')]+=1
            cur[ord(s2[i])-ord('a')] -= 1
            if cur == temp: return True
        return False

性能评估

在这里插入图片描述

心得:对python语言的不熟悉,代码编写能力仍需提高。业精于勤荒于嬉,行成于思毁于随。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值