擅长:python、mysql、java
<p>我们可以使用回溯,其中状态是每个字母使用的R、G、B的计数,以及在构造单词时选择的先前“RGB”</p>
<p>Python代码(未记忆):</p>
<pre><code>def f(i, word, prev, state):
if i == len(word):
return True
letter = word[i]
for second in ["R", "G", "B"]:
if state[letter][second] and prev != second:
state[letter][second] -= 1
is_valid = f(i + 1, word, second, state)
state[letter][second] += 1
if is_valid:
return True
return False
def get_counts(tuples):
result = {}
for letter, rgb in tuples:
if letter in result:
result[letter][rgb] += 1
else:
result[letter] = {"R": 0, "G": 0, "B": 0}
result[letter][rgb] = 1
return result
tuples = [('A', 'R'), ('B', 'R'), ('C', 'G'), ('D', 'G'), ('E', 'B'), ('D', 'B'), ('R', 'B'), ('F', 'R'), ('V', 'R'), ('A', 'G')]
counts = get_counts(tuples)
print f(0, "ACE", "", counts) # True
print f(0, "ACED", "", counts) # True
print f(0, "BF", "", counts) # False
</code></pre>