斐波那契字符串_KMP
前言:通过这道题恶补了一下字符串匹配的知识
思路:首先就是求出菲波那切字符串,这个很简单,但是要注意递归超时的问题,可以考虑加上备忘录,或者用递推法,接下来就是匹配问题了,常规的BF会超时,所以要用KMP,
下面的代码综合了这两种方法,就当做是一个复习,。。
#include<bits/stdc++.h> using namespace std;
string a[];
string array[];
int num[];
int num1[];
long long int m2=;
int next[];
string f(int k)//递归法加备忘录
{
if(k==) return "a";
if(k==) return "b";
if(k>) {
if(a[k-]==""){
a[k-]=f(k-);
}
if(a[k-]=="")
{
a[k-]=f(k-);
}
a[k] = a[k-]+a[k-];
return a[k];
}
}
string f1(int k)//递推法
{
string a1="a";
string a2="b";
string a3;
while(true)
{
a3=a2+a1;
a1=a2;
a2=a3;
k--;
// m2=a3.length();
if(k<=) return a3;
}
}
void BF(string str1,int stra,string str2,int strb,int k,int pos)
{
int i=pos;
int j=;
//cout << i << strb <<"---" <<endl;
while(i<stra && j<strb){
if(str1[i]==str2[j]){
i++;
j++;
}else
{
i=i-j+;
j=;
}
}
if(j>=strb){
num[k]++;
pos=i-strb+;
if(pos<=stra-strb){
BF( str1, stra, str2, strb,k, pos);
}
}
}
void get_next(string str,int stra)
{
int i=;
next[]=;
int j=;
while(i<stra){
if(j== || str[i]==str[j]){
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
}
int KMP(string a,int stra,string b,int strb,int k,int pos)
{
int i=pos;
int j=;
while(i<stra && j<=strb){
if(j== || a[i]==b[j-]){
i++;
j++;
}else{
j=next[j];
}
}
if(j>strb){
num1[k]++;
pos=i-strb+;
// cout << pos << " =pos" << endl;
if(pos<=stra-strb){
KMP(a,stra,b,strb,k,pos);
}
}
}
int main()
{
freopen("D:/Test/Test1.txt","r",stdin);
a[]="a";
a[]="b";
int k,m;
cin >> k >> m; memset(num,,sizeof(num));
memset(num1,,sizeof(num1));
for(int i=;i<m;i++){
cin >> array[i];
}
string str=f(k);
cout << "------使用BF算法得到的结果-------" <<endl;
for(int i=;i<m;i++){
BF(str,str.length(),array[i],array[i].length(),i,);
cout << num[i] << " "<< endl;
}
cout << "------使用KMP算法得到的结果-------" <<endl; for(int i=;i<m;i++){
get_next(array[i],array[i].length());
KMP(str,str.length(),array[i],array[i].length(),i,);
cout << num1[i] << " "<< endl;
}
return ;
}
斐波那契字符串_KMP的更多相关文章
- 牛客练习赛63 牛牛的斐波那契字符串 矩阵乘法 KMP
LINK:牛牛的斐波那契字符串 虽然sb的事实没有改变 但是 也不会改变. 赛时 看了E和F题 都不咋会写 所以弃疗了. 中午又看了一遍F 发现很水 差分了一下就过了. 这是下午和古队长讨论+看题解的 ...
- KI的斐波那契_DFS
Description KI十分喜欢美丽而优雅的斐波那契数列,最近他新认识了一种斐波那契字符串,定义如下 f (0) = b, f (1) = a, f (2) = f (1) + f (0) = a ...
- zstuoj 4245 KI的斐波那契
KI的斐波那契 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 550 Solved: 208 Description KI十分喜欢美丽而优雅的斐波那 ...
- 力扣题目汇总(重复N次元素,反转字符串,斐波那契数)
重复 N 次的元素 1.题目描述 在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次. 返回重复了 N 次的那个元素. 示例 1: 输入:[1,2,3,3] 输出:3 ...
- HDU 4639 Hehe(字符串处理,斐波纳契数列,找规律)
题目 //每次for循环的时候总是会忘记最后一段,真是白痴.... //连续的he的个数 种数 //0 1 //1 1 //2 2 //3 3 //4 5 //5 8 //…… …… //斐波纳契数列 ...
- 洛谷P1755 斐波那契的拆分
题目背景 无 题目描述 已知任意一个正整数都可以拆分为若干个斐波纳契数,现在,让你求出n的拆分方法 输入输出格式 输入格式: 一个数t,表示有t组数据 接下来t行,每行一个数n(如题) 输出格式: t ...
- hdu-5686 Problem B(斐波那契数列)
题目链接: Problem B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDOJ/HDU 5686 Problem B(斐波拉契+大数~)
Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种 ...
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
随机推荐
- 编程之法:面试和算法心得(寻找最小的k个数)
内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java 题目描述 输入n个整数,输出其中最小的k个. 分析与解法 解法一 要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个 ...
- easyui treegrid的使用示例
一.前端: <div id="tbList" fit="true"></div> $(function () { $("#tb ...
- 杂项-关于strlen()的使用
发现了一个很坑的东西. 看下面两份代码: //code1 char s[N]; ;i<strlen(s);i++)Do(); //code2 char s[N]; ;s[i];i++)Do(); ...
- 廖雪峰Java12maven基础-1maven入门-2依赖管理
maven 如果我们的项目依赖第三方的jar包: Commons Logging发布的jar包在那里下载? 使用Log4j需要哪些jar包 其他依赖:junit,Javamail,MySQL驱动... ...
- LUOGU P4163 [SCOI2007]排列
传送门 解题思路 首先我们发现这道题s的长度很小,所以考虑点暴力的做法,状压dp或搜索.本蒟蒻搜索永远调不对,所以就写了个状压dp.因为所有s里的数都要出现一次,并且最后的答案是要求整除,那么我们设d ...
- 使用UUID和int自增主键的区别
知其然,知其所以然.在看到生成UUID的代码,后带给我的百度结合自己的经验再写下来的区别 一.UUID做主键: 优点: .保证数据在表和库都是独立的,有利于后续的分库 .合并表的时候主键不会重复 .有 ...
- System.Web.Mvc.FileResultc.sc
ylbtech-System.Web.Mvc.FileResultc.sc 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Public ...
- 06_jQuery对象初识(四)文档处理
1. 案例:在ul中添加li标签. append在最后添加 prepend在最前面添加 <ul id="ul"> <li>1</li> < ...
- GitHub for Visual Studio使用讲解
从VS2015起(应该是吧?),微软已经在VS中集成了GitHub,方便开发者对项目进行版本控制. 扩展包下载地址:https://aka.ms/ghfvs 其实VS2015的安装包中已经自带了这个扩 ...
- 05-4-style的代替操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...