Leetcode.209——长度最小的子数组

前景提要

需要用到的数据结构:列表、字典
字符串如何转换成列表?
例1:
“abcd”->[a,b,c,d]

str="abcd"
list=list(str)

例2:
“ad sc fv”->[ad,sc,fv]

str="ad sc fv"
list=str.split(' ')

如何给字典赋值
例1:

a={}#建立空字典
b="xx"
c=1
a[b]=c
print(a)

运行得:{“xxx”:1}
python中的循环体怎么写?
这里类比C语言:

for(int i=0;i<9;i++){
    //to do
}

那么Python中的写法是:

for i in range(9):
    pass
#或者
for i in range(0,9):
    pass

解题思路

这一题应将要比较的两个字符串拆分成列表,并将列表中元素的索引值映射到对应元素上形成字典,比较形成的字典是否相等,若相等,则返回True,否则返回False。推演:

def test():
    #初始化
    pattern="abba"
    str="dog cat cat dog"
    #列表化
    list1=list(pattern)
    list2=str.split(str)
    #求列表长
    len1=len(list1)
    len2=len(list2)
    #依题意可知符合条件的情况下len1必然等于len2,因此这里作比较,若不相等,则直接返回False。
    if len1!=len2:
        return Flase
    #符合条件,进入循环体
    for i in range(len1):
        #判断list1和list2的第i位元素是否作为键存在于各自的字典中,若都在,
        if list1[i] in dic1 and list2[i] in dic1:
            #判断键对应的值是否相等。为什么要判相等呢?后面看
            if dic1[list1[i]]==dic2[list2[i]]:
                #如果相等,继续执行循环体
                continue
            else:
                #否则,说明两字符串不符合要求
                return False
        #若都不在,
        elif list1[i] not in dic1 and list2[i] not in dic1:
            #将它们加进字典,并将索引值设为键的值
            dic1[list1[i]]=i
            dic2[lsit2[i]]=i
        #若一个在一个不在:
        else:
            #则一定不符合要求
            return Flase
    #若能遍历结束,说明是符合的
    renturn True

解构:
1.list1=[a,b,b,a],list2=[dog,cat,cat,dog]。dic1={},dic2={}
2.第一轮循环,a不在dic1中,dog不在dic2中,字典元素追加,得:dic1={“a”:0},dic2={“dog”:0}
3.第二轮循环,b不在dic1张,cat不在dic2中,字典元素追加,得:dic1={“a”:0,“b”:1},dic2={“dog”:0,“cat”:1}
4.第四轮循环,b已在dic1中,cat已在dic2中.且dic1[“b”]=dic2[“cat”]=1,所以跳出当前循环继续.
5.第五轮循环,a已在dic1中,dog已在dic2中.且dic1[“a”]=dic2[“dog”]=0,所以跳出当前循环继续.
6.循环结束,返回True。

猜你喜欢

转载自blog.csdn.net/qq_42229092/article/details/104443046