📌  相关文章
📜  国际空间研究组织 | ISRO CS 2008 |问题 54(1)

📅  最后修改于: 2023-12-03 15:07:33.413000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2008 | 问题 54

题目描述

判断给定的字符串是否是双后缀字符串,如果是则返回该字符串的长度,否则返回-1。

双后缀字符串是指既是前缀又是后缀的字符串。例如,字符串“abab”既是“ab”的前缀,又是“ab”的后缀,因此它是一个双后缀字符串。

输入格式

输入的第一行包含一个整数T,表示测试用例的数量。每个测试用例包含一个字符串S。

输出格式

对于每个测试用例,如果该字符串是双后缀字符串,则输出该字符串的长度,否则输出-1。

样例输入
3
abab
abaca
aadaa
样例输出
4
-1
3
解题思路

此题的难点在于如何判断一个字符串是否为双后缀字符串。由于一个双后缀字符串是既是前缀又是后缀的字符串,因此我们可以从字符串的两端同时向中间扫描,记录下两端扫描遇到的最长相同前缀,然后比较这个前缀是否满足要求。

如果一个前缀可以同时作为一个字符串的前缀和后缀,那么这个前缀的长度一定是字符串的总长度的一半。因此,我们只需要将字符串的长度除以二,然后判断前半部分是否与后半部分相同即可。

参考代码
def is_double_suffix(s):
    n = len(s)
    if n % 2 != 0:
        return False
    mid = n // 2
    return s[:mid] == s[mid:]

def get_double_suffix_len(s):
    if is_double_suffix(s):
        return len(s)
    else:
        return -1

t = int(input())
for i in range(t):
    s = input().strip()
    print(get_double_suffix_len(s))
以上代码是一个 Python 代码示例,用于判断一个字符串是否为双后缀字符串,并返回字符串的长度。首先判断字符串的长度是否为偶数,如果不是,则字符串一定不是双后缀字符串。然后将字符串分为两部分,分别判断前半部分和后半部分是否相同,如果相同则字符串是双后缀字符串,返回字符串的长度,否则返回-1。

代码的输入格式为测试用例的数量和每个测试用例的字符串,输出格式为每个测试用例的结果,即判断字符串是否为双后缀字符串,并返回字符串的长度或-1。

以上代码示例为markdown格式。