码迷,mamicode.com
首页 > 其他好文 > 详细

10.5 字符串统计

时间:2019-10-05 18:15:58      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:这一   添加   转换   字符   字符串   解法   方案   重复   line   

题意

定义一个对字符串的操作为删去该串的任意一个连续子串,并把剩下的部分拼接成一个字符串

给定一个字符串\(S\),请计算有多少个长度为\(N\)的字符串,无论怎样对其进行操作都无法使它成为字符串\(S\)


解法

补集转换一下,答案就是总的字符串个数\(26^N\)减去不合法的字符串个数

不合法的字符串可以看成是在\(S\)串的内部加入连续\(N-S\)个字符形成的

那么,对于每一个\(S\)串中可插入的空位(共\(S+1\)个),我们都能插入\(N-S\)个字符,形成的字符串就有\((S+1)\times 26^{N-S}\)个。但显然这样形成的字符串是有重复的,考虑不重不漏的计算

可以把长度为\(N-S\)的字符串在\(S\)中的添加视为窗口式的滑动,那么一开始字符串在\(S\)的右端,此时的方案为\(26^{N-S}\),窗口向左滑一格,把\(S\)的最右边的元素挤到整个字符串的右端

此时的方案是同样\(26^{N-S}\),但这里的方案与前面的方案有重合。我们钦定加进的字符串的第一个元素不同,(因为如果相同,我们可以发现这一层的窗口是被上一层的窗口完全包含的,也就是代表的方案也完全相同)那么也就能计算出与前面的方案没有重合的新方案\(25\times 26^{N-S-1}\)

可以发现对于每一个位置与前面的没有重合的方案都是\(25\times 26^{N-S-1}\)

那么最后的答案即为\(26^N-26^{N-|S|}-25\times 26^{N-|S|-1}\times |S|\)


10.5 字符串统计

标签:这一   添加   转换   字符   字符串   解法   方案   重复   line   

原文地址:https://www.cnblogs.com/VeniVidiVici/p/11625187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!