比较两个不同字符串中的字符

时间:2021-06-09 09:09:32

标签: python-3.x

给定一个看起来像的示例词链

host
must
most
post
cost
cast
east
vast
fast
easy
ease
case

我需要确定每个连续单词仅相差一个字母。 例如以下是一个有效的词链,由 3 个词组成,其中每个词与前一个词相差一个字母。

Shop
Stop
Step

我需要编写一个程序,如果条件满足则返回true,否则打印Invalid step from (word1) to (word2)

到目前为止,我尝试将这些单词放入列表中,然后将它们的字符剥离到列表列表中并进行比较。但它既不高效也不正确。 对此有什么建议吗?

我的代码:

seen=['poll','roll','toll','told']

alist=[]
for i in seen:
    chain1=[]
    for j in i:
        chain1.append(j)
    alist.append(chain1)
for i in range(len(alist)-1):
    for j in range(len(alist)-1):
        chars=[]
        if alist[i][j] not in alist[i+1][j]:
            chars.append(alist[i+1][j])
            if len(chars)>1:
                print('Invalid step from', alist[i], '->', alist[i + 1])

1 个答案:

答案 0 :(得分:0)

你可以这样做:

seen=['poll','roll','toll','told']

def check(x,y):
  cnt = 0
  for i in range(len(x)):
    if x[i] != y[i]:
      cnt += 1
  return cnt

for i in range(len(seen)-1):
  if(1 != check(seen[i],seen[i+1])):
    print('Invalid step from', seen[i], '->', seen[i + 1])
    break

首先定义一个函数,检查每个位置的字符,看看两个字符串有多大不同。如果只有一个字符不同,我们很好。否则,我们停止进一步检查,因为梯形词无效。

请注意,上述逻辑假设您输入中的每个字符串的长度相同,并且您在更改字母时不会混淆单词,即“roll”到“plol”不是有效的转换,即使只有一个字符发生了变化