有一个MxN的棋盘,每个格子上有一个字母,现在按照下面的规则来构造单 词: 可以从任意一个位置开始,接着向该位置相邻的8个位置中选取下一个(不 能选取已经选取过的位置),如此循环,构成一个字母序列,生

本文深入探讨了一种基于矩阵的字符串匹配算法,通过定义特定的字母矩阵和一系列逻辑判断,实现对目标字符串的有效检测与生成。文章详细解释了算法的工作原理,包括如何在矩阵中定位单词及其后续字符,以及如何通过位置调整进行连续匹配。

targets = [
“ARE”, “PENPIEAPPLE”, “APPLEPEN”, “APPLE”, “LIPS”, “RED”, “AIR”, “PLEASE”
]

def cangenerate(str):

result = detect_word(str)
if result:
    print("可以生成%s" % str)
else:
    print("不可以生成%s" % str)

def position(str, letters):

for word in letters:
    i = letters.index(word)
    for w in word:
        if w == str:
            j = word.index(str)
            return i, j

def site_position(i, j, next_word, letters):
leter = []
for s in [-1, 0, 1]:
for d in [-1, 0, 1]:
try:
if i + s < 0 or j + d < 0:
continue
if i + s == i and j + d == j:
continue
let = letters[i + s][j + d]
except Exception as e:
pass
else:
leter.append(let)

if next_word in leter:
    del letters[i][j]
    return True
else:
    return False

def detect_word(str):
letters = [[‘A’, ‘R’, ‘E’], [‘I’, ‘P’, ‘D’], [‘E’, ‘L’, ‘P’]]
for w in str:
i, j = position(w, letters)
if str.index(w) + 1 < len(str):
k = str.index(w) + 1
next_word = str[k]
if site_position(i, j, next_word, letters):
continue
else:
return False
else:
return True

if name == “main”:
for letter in targets:
cangenerate(letter)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值