给定一个看起来像的示例词链
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])
答案 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”不是有效的转换,即使只有一个字符发生了变化