用 Python 中的等效对检查字符串是否为回文的程序
假设我们有一个名为s的小写字母字符串,还有一个名为“pairs”的对列表。成对的每个元素都有两个字符串[a,b],其中字符'a'和'b'被认为是相同的。如果有像[a,b]和[b,c]这样的两对,那么我们可以说a和b是等价的,b和c也是等价的,所以a和c也是等价的。任何值a或b都等价于自身。我们必须用给定的等价关系检查s是否是回文。
因此,如果输入类似于s="raceckt"pairs=[["r","t"],["a","k"],["z","x"]],那么输出将是真的,因为“a”=“k”,而“r”=“t”所以字符串可以是回文的“racecar”。
示例
让我们看看以下实现以获得更好的理解-
from collections import defaultdict
def solve(s, pairs):
g = defaultdict(list)
G = defaultdict(set)
for x, y in pairs:
g[x].append(x)
g[y].append(y)
g[x].append(y)
g[y].append(x)
def dfs(a, so_far):
so_far.add(a)
for elem in g[a]:
if elem not in so_far:
dfs(elem, so_far)
for key in g:
dfs(key, G[key])
for i in range(0, len(s) //2):
if s[i] == s[-1 - i] or (s[i] in G[s[-1 - i]] or s[-1 - i] in G[s[i]]):
continue
else:
return False
return True
s = "raceckt"
pairs = [["r", "t"], ["a", "k"], ["z", "x"]]
print(solve(s, pairs))输入
"raceckt", [["r", "t"], ["a", "k"], ["z", "x"]]输出结果
True