任何想法都是一种简单快捷的方法,将所有单词放在Scrabble板上,而电路板由2D Array of char表示?
提前致谢
答案 0 :(得分:5)
这类似于Artsiom's answer,但涵盖了Scrabble板在单词之间会有空格的事实。
所以假设你的“2D数组字符”看起来像这样:
board = [['s','t','a','c','k',' ',' ',' '],
['p',' ',' ','a',' ','c',' ',' '],
['o','v','e','r','f','l','o','w'],
['o',' ','a','t',' ','a',' ','a'],
['n','o','t',' ',' ','m','a','t'],
[' ',' ','e',' ',' ',' ',' ','e'],
[' ',' ','r',' ',' ',' ',' ','r'],
[' ','e','y','e','s',' ',' ',' ']]
您可以执行以下操作:
import itertools
rows = (''.join(row) for row in board)
columns = (''.join(column) for column in zip(*board))
words = [word for line in itertools.chain(rows,columns) for word in line.split() if len(word) > 1]
给出了:
['stack', 'overflow', 'at', 'not', 'mat', 'eyes', 'spoon', 'eatery', 'cart', 'clam', 'water']
我们正在做的是将每一行和每一列字符转换为'not mat'
之类的字符串,然后使用str.split()
扔掉空格,为我们提供一个单词列表,扔掉任何字符串一封信长。
使用itertools.chain()
只允许我们在单个列表理解中循环遍历行和列。
答案 1 :(得分:3)
在每列中从上到下搜索连续的字符集,然后在每行中从左到右搜索相同的字符。它将是O(n ^ 2),但我认为你不会变得更好。
答案 2 :(得分:0)
如果我对你的理解正确,你也可以尝试使用这样的东西:
a = [['w','o','r','d'],
['i','p','o','d'],
['k','u','a','k'],
['i','s','d','s']]
lines = (''.join(line) for line in a)
rows = (''.join(line) for line in zip(*a))
print list(lines)
print list(rows)