欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组中两个字符串的最小距离 Python 版

程序员文章站 2024-02-27 23:50:57
...

 

#求数组中两个字符串的最小距离 Python 版第一版
t=['*','3','*','5','10','9','7','1','*']
a='*'
b='9'
c=[]
d=[]
k=0
g=0
for i in t:
    if i==a:
       c.append(k)
    k=k+1
    
for i in t:
    if i==b:
       d.append(g)
    g=g+1
e=0
f=[]
for i in c:
    for j in d:
        if d.index(j)==0:
            e=abs(i-j)
        if e>abs(i-j):
            e=abs(i-j)
    f.append(e)

print(min(f))


'''
解题思路
第一步判断两个字符串是否在数组里,不在返回-1,字符串相等返回0
第二步字符串在数组里,且不相等情况处理
1.找出字符串a在数组里所有位置即索引,一个for循环获取到字符串a在数组所有位置
k=0
for i in t:
   if i==a:
       print(k)
    k=k+1
2.获取到字符串a所有位置储存到list表里这里用 c列表表示,代码更改一下
c=[]
k=0
for i in t:
   if i==a:
       c.append(k)
    k=k+1
同样可以获取到字符串b在字符串所有位置,用d列表储存b字符串所有位置
d=[]
g=0
for i in t:
   if i==b:
       c.append(g)
    g=g+1
3.比较两个列表之间差值,差值最小即为数组中两个字符串的最小距离
比较两个列表这里需要使用到两个for循环,根据前面获得c,d两个列表数据
e=0
f=[]
for i in c:
    for j in d:
        if d.index(j)==0:
            e=abs(i-j)
        if e>abs(i-j):
            e=abs(i-j)
    f.append(e)
4.求出列表f最小值
min(list)        
'''
'''
总结一下,主要使用list数据结构应用,使用到列表函数由
获取索引 index()
最小值min()
遍历列表
for i in list:
    print(i)
for循环嵌套
绝对值函数abs()
**注意index()获取索引,存在多个重复元素,默认取排序靠前索引数
'''

'''
可以看到代码存在多个重复代码使用,代码优化一下,使用函数式编程,取个函数名abc
'''

#求数组中两个字符串的最小距离 Python 版第二版
def abc(a,b,t):
    if a not in t or b not in t:
        return -1
    if a==b:
        return 0   
    c=[]
    d=[]
    k=0
    g=0
    for i in t:
        if i==a:
           c.append(k)
        k=k+1
        
    for i in t:
        if i==b:
           d.append(g)
        g=g+1  
    e=0
    f=[]
    for i in c:
        for j in d:
            if d.index(j)==0:
                e=abs(i-j)
            if e>abs(i-j):
                e=abs(i-j)
        f.append(e)
    return(min(f))