字符串计数

文章目录

问题

https://www.nowcoder.com/questionTerminal/7615ed51b7b94b9eadf0776146b4e23c

给定一个仅由小写字母组成且长度不超过 1 0 6 10^6 106 的字符串,将首字符移到末尾并记录所得的字符串,不断重复该操作,虽然记录了无限个字符串,但其中不同字符串的数目却是有限的,那么一共记录了多少个不同的字符串?
在这里插入图片描述
输入样例:
abab
输入样例:
2

解决

kmp找循环节,首先构造next数组,然后判断有没有循环节,有循环节则输出循环节长度,否则字符串有多长就有多少。

python实现

s = input()
l = len(s)
nxt = [0] * (l+1)
nxt[0] = -1
i, j = 0, -1
while i < l:
    if j == -1 or s[i] == s[j]:
        i += 1
        j += 1
        nxt[i] = j
    else:
        j = nxt[j]
# 判断循环节 
if l % (l-nxt[l]) == 0 and nxt[l] != 0 :
    print(l-nxt[l])
else:
    print(l)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值