数组中两个字符串的最小距离 Python 版
#求数组中两个字符串的最小距离 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))