首页 > 其他分享 >字符串

字符串

时间:2024-08-03 18:38:40浏览次数:6  
标签:ll ans fail num str kmp 字符串

aaa
今天字符串专题
1) KMP
思想是对于每一位求出最长的后缀等于前缀的长度 next
周期:
字符串:【】【】【】【】【不完整周期】
【】就是周期
有一个周期就是串长减去 next,
所有周期长度都是最小周期的倍数;
如果串不是最小周期的倍数,则这个串没
有循环节。

【NOI2014 动物园】

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll M=1e9+7;
ll n;
ll num[N];
ll kmp[N];
ll Ans(string str){
	ll len=str.size();
	ll ans=1;
	ll j=0;
	num[1]=1;
	for(ll i=1;i<len;i++){
		while(j&&(str[j]!=str[i])){
			j=kmp[j];
		}
		if(str[j]==str[i]) j++;
		kmp[i+1]=j;
		num[i+1]=num[j]+1;
	}
	j=0;
	for(ll i=1;i<len;i++){
			while(j&&(str[j]!=str[i])){
				j=kmp[j];
			}
			if(str[j]==str[i]) j++;
			while(j>(i+1)/2) j=kmp[j];
			ans=(ans*(num[j]+1))%M;;
		}
		
	return ans;
}
int main(){
	cin>>n;
	while(n--){
		string str;
		cin>>str;
		memset(kmp,0,sizeof(kmp));
		//memset(num,0,sizeof(num));
		cout<<Ans(str)<<endl;
	}
	return 0;
}
2)AC自动机 这里需要仔细解释一下 Trie 的结点的含义,尽管这很小儿科,但在之后的理解中极其重要。Trie 中的结点表示的是某个模式串的前缀。我们在后文也将其称作状态。一个结点表示一个状态,Trie 的边就是状态的转移。 fail 指针的意义:一个点的 fail 指针的意思是指向了从跟到这个点最长 的一节后缀的位置,因为每个点的 fail 指针是唯一的,所以我们可以建 出来一个 fail 树。 主串遍历:保留最长一个后缀进行匹配,能匹配上的 fail 树上所有祖先。 好吧,还有一大堆要补的啦,但是问题不大。。。

标签:ll,ans,fail,num,str,kmp,字符串
From: https://www.cnblogs.com/Euan99/p/18333935

相关文章

  • 模拟实现strcmp,判断二个字符串是否相等
    1.判断二个字符串是否相等,可以模仿strcmp.当二个字符串相等的时候ruturn0.,当二个字符串小于时返回为小于0,当二个字符串大于时返回为大于0。const为不可以更改。//方法一intmy_strcmp(constchar*arr1,constchar*arr2){ assert(arr1&&arr2); while(*arr1==*arr2)......
  • 2024-08-03:用go语言,给定一个从 0 开始的字符串数组 `words`, 我们定义一个名为 `isPref
    2024-08-03:用go语言,给定一个从0开始的字符串数组words,我们定义一个名为isPrefixAndSuffix的布尔函数,该函数接受两个字符串参数str1和str2。当str1同时是str2的前缀和后缀时,函数返回true;否则返回false。例如,isPrefixAndSuffix("aba","ababa")返回true,因为"ab......
  • 如何将 f 字符串转换为 .format()?
    我有这个函数,它使用f字符串来打印许多变量:defmyfunc(*args,**kwargs):if'fruit'and'juice'inkwargs:print(f"Ilike{'and'.join(args)}andmyfavoritefruitis{kwargs['fruit']}")print(f"M......
  • 【Python】数据类型之字符串
    本篇文章将继续讲解字符串其他功能:1、求字符串长度功能:len(str)  ,该功能是求字符串str的长度。代码演示:2、通过索引获取字符串的字符。功能:str[a]  str为字符串,a为整型。该功能是获取字符串str索引为a处的字符。注意:字符串的索引是从0开始的。代码演示:注意......
  • shell获取敏感词接口json数据更新时重启nginx+lua环境、一个逐步删除服务器上文件夹的
    一、shell获取敏感词接口json数据如有更新重启nginx+lua环境    因为工作需要,需要写一个shell脚本获取对应接口的数据(其它管理后台控制的敏感词库)。因为当前平台是nginx+lua脚本,重装加载敏感词需要重启nginx.实现起来也很简单,第一点,需要对获取的json数据进行分析,shell......
  • C primer plus 第四章 4.2字符串简介
    一、什么是字符串:    是一个或多个字符的序列(被双引号引起来的就是字符串),单引号引起来的是字符,字符串=字符+空字符二、char类型和null字符:    *C中没有专门储存字符串的变量,字符串被储存在char类型的数组中。     数组:由连续的储存单元组成,字符串......
  • js替换字符串里的空格
    js替换字符串里的空格_百度搜索(baidu.com) ......
  • C#常用字符串
    1.ToUpper()作用:将字符转换成大写形式,仅对字母有效。返回值是转换后的字符串。使用:字符串变量.方法名();例如:name.ToUpper();2.ToLower()作用:将字符转换成小写形式,仅对字母有效。返回值是转换后的字符串。使用:字符串变量.方法名();例如:name.ToUpper();3.Equals()※作用:......
  • JS之File对象与base64字符串之间的相互转换
    File对象有两种形态,在请求时为:控制台输出为:从formData中获得fileList对应的File对象,并转换为base64字符串,再转换回File对象,代码示例如下:constfileList=uploadFormData.get("fileList");console.log(fileList);constreader=newFileReader();reader.readAsDataURL(......
  • Kotlin 字符串教程:深入理解与使用技巧
    Kotlin字符串字符串用于存储文本。字符串包含由双引号包围的字符集合:示例vargreeting="Hello"与Java不同,您不必指定变量是字符串。Kotlin足够智能,可以通过双引号理解上例中的greeting变量是字符串。然而,与其他数据类型一样,如果您坚持,可以指定类型:示例vargreeti......