Python程序打印作为给定字符串前缀的子字符串
给定一个字符串,打印所有可能的子字符串,它们也是给定字符串的前缀。
例子:
Input : ababc
Output : a, ab, aba, abab, ababc, a, ab
Input : abdabc
Output : a, ab, abd, abda, abdab, abdabc, a, ab
方法:
我们使用两个变量: start和end来跟踪当前子字符串,并遵循以下条件,直到start < len(string)
:
- 如果当前子字符串也是给定字符串的前缀,则打印它并增加end 。如果
end == len(string)
,增加start和end = start
- 否则递增start和
end = start
检查当前子字符串是否为给定字符串前缀的逻辑:
string[end] == string[end-start]
这利用了这样一个事实:如果一个长度为L的子字符串是给定字符串的前缀,那么在序列中包含下一个字符ch后得到的长度为L+1的子字符串也是给定字符串的前缀,如果该字符字符串中的(L+1)索引处等于ch 。
下面是上述方法的实现:
# Python3 code to find all possible substrings that
# are also the prefix of the given string
# Function to print all the special substrings
def func(string):
# Used to store the starting and
# ending index of the substrings
start, end = 0, 0
while start < len(string):
# If substring is also the prefix
if string[end] == string[end-start]:
# Print the substring
print(string[start:end + 1], end= " ")
end += 1
if end == len(string):
start += 1
end = start
# Increment the starting
# index of the substring
else:
start += 1
end = start
if __name__ == "__main__":
string = "ababc"
func(string)
输出:
a ab aba abab ababc a ab
时间复杂度: