Google Kick Start E 轮刚刚结束,我无法弄清楚我在实施回文匹配问题时错过了哪些边缘情况。
问题: 给你一个长度为 N 的回文字符串 P,仅由英文字母表中的小写字母组成。找到最短的非空回文串 Q,使得 P 与 Q 连接形成回文。形式上,字符串 PQ 形成一个回文。
输入: 输入的第一行给出测试用例的数量,T。T测试用例跟随。每个测试用例由两行组成。每个测试用例的第一行包含一个整数N,表示字符串P的长度。每个测试用例的第二行包含一个长度为N的回文字符串P。
输出:对于每个测试用例,输出一行包含 Case #x: y,其中 x 是测试用例编号(从 1 开始),y 是非空回文串 Q,如上所述。
这是完整问题的链接:
https://codingcompetitions.withgoogle.com/kickstart/round/00000000008cb0f5/0000000000ba82c5
我的总体想法是迭代给定的回文并确定是否可以将当前索引处的字符串拆分为两个回文。我可以的第一个实例是最短的非空回文字符串,我可以将其连接到给定回文的末尾以形成一个新的回文。这是我写的第二次检查时卡住的内容:
import fileinput
cases = 0
total_cases = 0
length = 0
def check_palindrome(st,en, s):
while(st < en):
if s[st] == s[en]:
st += 1
en -=1
else:
return False
return True
def solve(s):
for i in range(1,len(s) - 1):
if check_palindrome(i, len(s) - 1, s) and check_palindrome(0, …Run Code Online (Sandbox Code Playgroud)