📌  相关文章
📜  Python程序打印作为给定字符串前缀的子字符串

📅  最后修改于: 2022-05-13 01:55:14.200000             🧑  作者: Mango

Python程序打印作为给定字符串前缀的子字符串

给定一个字符串,打印所有可能的子字符串,它们也是给定字符串的前缀。

例子:

Input : ababc         
Output : a, ab, aba, abab, ababc, a, ab
          
Input : abdabc          
Output : a, ab, abd, abda, abdab, abdabc, a, ab          

方法:
我们使用两个变量: startend来跟踪当前子字符串,并遵循以下条件,直到start < len(string)

  • 如果当前子字符串也是给定字符串的前缀,则打印它并增加end 。如果end == len(string) ,增加startend = start
  • 否则递增startend = 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

时间复杂度: O(n^2)