# nums=[3,2,1,0,4]
#从列表头开始,按照元素的值向列表结尾方向跳元素值步长,往结尾方向跳
#刚好调到结尾返回true
#其他情况返回false 包括 超出列表或者原地踏步
nums=[2,3,1,1,4,1,1,1,1,3,1]
def get_nums(l):
    s=l[0]
    n=0
    counts=0

    while True:

        if n==len(l)-1:
            return True
        elif n>len(l) or counts>len(l):
            return False
        if s==0:
            n+=s
        else:
            n+=l[n]
        counts+=1
if __name__ == '__main__':
    print(get_nums(nums))
import time
a="aaaabcabc{}abcdefwdefghij{}gghhii{}j".format(500*"x",500*"x",900*"x")
b="aa"

# hebin h00390023对所有人说说: 07:09 PM
# 题目描述
# 给你一个字符串s和一个字符串p,请问最少去掉s中的多少个字符,才能使得p是s的子串呢?
#
# 解答要求
# 时间限制:1000ms, 内存限制:100MB
# 输入
# 两行,第一行为字符串s,第二行为字符串p。(s和p只包含小写英文字母,s的长度不超过2000,p的长度不超过10,且保证有解)
#
# 输出
# 最少去掉的字符个数。
#
# 样例
# 输入样例 1 复制
#
# axb
# ab
# 输出样例 1
#
# 1

def get_res(a,b):
    #要按照顺序出现
    current_index=0
    for i in b:
        if i in a[current_index:]:
            #所有开始位置开始到结束
            current_index+=a[current_index:].index(i)
    return current_index+1-len(b)
def main(a,b):
    # 找到所有开始
    res_l=[]
    s_list=[]
    for i,a_data in enumerate(a):
        if a_data==b[0]:
            s_list.append(i)
    for a_part in s_list:
        res_l.append(get_res(a[a_part:],b))
    return min(res_l)

if __name__ == '__main__':
    s=time.time()
    # print(get_res(a,b))
    print(main(a,b))
    print(time.time()-s)