题目要求:
小M在研究字符串时发现了一个有趣的现象:某些字符串是由一个较短的子串反复拼接而成的。如果能够找到这个最短的子串,便可以很好地还原字符串的结构。你的任务是给定一个字符串,判断它是否是由某个子串反复拼接而成的。如果是,输出该最短的子串;否则,输出空字符串""。
例如:当输入字符串为 abababab 时,它可以由子串 ab 反复拼接而成,因此输出 ab;而如果输入 ab,则该字符串不能通过子串的重复拼接得到,因此输出空字符串。
测试样例:
样例一:
输入:inp = "abcabcabcabc" 输出:'abc'
样例二:
输入:inp = "aaa" 输出:'a'
样例三:
输入:inp = "abababab" 输出:'ab'
样例四:
输入:inp = "ab" 输出:''
样例五:
输入:inp = "abcdabcdabcdabcd" 输出:'abcd'
样例六:
输入:inp = "b" 输出:''
题目难度:
简单
解题语言:
python
本题思路 我们首先需要找到一个最短的子串,使得该子串重复拼接可以得到输入的字符串。 然后我们可以使用字符串操作来实现数据结构选择:
本题算法步骤: 1.遍历所有可能的子串长度(从1到字符串长度的一半)。 2.对于每个子串长度,检查是否可以通过该子串的重复拼接得到原字符串。 3.如果找到这样的子串,返回该子串;否则,返回空字符串。
代码:
def solution(inp):
for i in range(1, len(inp) // 2 + 1):
substring = inp[:i]
if substring * (len(inp) // len(substring)) == inp:
return substring
return ""
if __name__ == "__main__":
print(solution("abcabcabcabc") == "abc")
print(solution("aaa") == "a")
print(solution("abababab") == "ab")
print(solution("ab") == "")
print(solution("abcdabcdabcdabcd") == "abcd")
print(solution("b") == "")
解释与思考:
// for i in range(1, len(inp) // 2 + 1): 此步骤遍历所有可能的子串长度。
//substring = inp[:i]: 此步骤提取当前长度的子串。
//if substring * (len(inp) // len(substring)) == inp:
此步骤检查是否可以通过该子串的重复拼接得到原字符串。
//return "": 此步骤为如果没有找到符合条件的子串,返回空字符串。
那么如何判断一个字符串是否由某个子串反复拼接而成?
我的思路是 首先我们需要找到一个最短的子串,使得该子串重复拼接可以得到输入的字符串。
那么如何找到这个子串?
我们可以使用字符串操作来实现,我们对于每个子串长度,均提取子串并重复拼接,检查是否等于原字符串。全部历遍所有情况即可实现