Python求解一个字符串所有的子串算法

给定一个字符串,s = “abcdef",求出它的所有子字符串

分析:

  1. 先来分析此例中”abcdef"的长度为6。它的子字符串长度len(sub_s)可能为1,2,3…,5,6;
  2. 然后再分析每种长度的字符串的个数,分别对应着6,5…,3,2,1;
  3. 因此可以看出"abcdef"的子字符串的个数为:6+5+4+3+2+1 = 21

思路:用算法解决的话,外层循环次数等于len(string)大小,如果用i表示外层每次循环大小(i = 0,1,2,3,4,5),而内层循环次数j进行len(s)- i 循环(j = 6,5,4,3,2,1)。因此循环体产生的次数为(len(s)*len(s)+1)/2,这个算法的时间复杂度为O(N2)

class Solution:
	def calculateSubString(self,s):
		for i in range(len(s)):
			for j in range(len(s) - i)):
				print s[j:j+i+1] # i+1依次取到 1,2,3,4...表示对字符串截取所进行的步长。

obj = Solution()
obj.calculateSubString('abcdef')
#a,b,c,d,e,f,ab,bc,cd,de,ef,abc,bcd,cde,def,abcd,bcde,cdef,abcde,bcdef,abcdef

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值