codeforce 7D kmp字符串匹配
来源:互联网 发布:手机钢琴软件 编辑:程序博客网 时间:2024/06/05 16:48
http://codeforces.com/problemset/problem/7/D
题目大意:一个字符串是回文串有一定的水平值他的水平值:如果他的前一半串和后一半串是k-1水平,那么他就是k。
解题思路:用kmp,具体就是把原串当作匹配串,倒过来匹配,当匹配的长度,大于等于当前的下标,这说明出现回文了
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int N=5000006;int next[N];char a[N];bool is[N];int i,n,j,ans;int count(int r)//返回的是以r为结尾的字符串水平值是多少{ if(!r) return 1; int ret=1; while(r>0) { r=(r-1)>>1; if(is[r]) ++ret; else break; } return ret;}int main(){ while(~scanf("%s",a)) { memset(is,0,sizeof(is)); n=strlen(a); next[0]=j=-1; for(i=1;i<n;i++)//KMP算法求next数组 { while(j>-1&&a[j+1]!=a[i]) j=next[j]; if(a[j+1]==a[i]) ++j; next[i]=j; } j=-1; for(i=n-1;i>=0;i--)//以原字符串为标准串于本身倒序匹配,当匹配结果大于等于一半是说明回文 { while(j>-1&&a[j+1]!=a[i]) j=next[j]; if(a[i]==a[j+1])++j; while(j>=i) { is[i+j]=1; j=next[j]; } } for(ans=i=0;i<n;++i) if(is[i]) ans+=count(i); printf("%d\n",ans); } return 0;}
0 0
- codeforce 7D kmp字符串匹配
- Codeforce 149D(区间dp+括号匹配)
- KMP 字符串匹配算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- 字符串匹配 KMP
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串匹配 KMP 算法
- KMP字符串匹配(1)
- KMP字符串匹配(2)
- KMP字符串匹配(3)
- KMP字符串匹配算法
- KMP字符串匹配
- 遗传算法--genetic algorithm
- codefroces 110A Nearly Lucky Number(模拟水题)
- QML官方系列教程——First Steps with QML
- Android多线程研究(5)——线程之间共享数据
- 乔纳森-弗莱彻:被遗忘的搜索引擎之父
- codeforce 7D kmp字符串匹配
- Ogre学习的环境搭配的选择
- c2java 动态规划之模糊匹配
- Become a Better Developer: 3 Ways Writing Will Expand Your Mind, Improve Your Code and Grow Your Car
- 黑马程序员_Java的泛型
- MySQL学习笔记之六 向数据表插入行记录
- 金融界网站模拟白银大赛,盈利可以兑换现金
- AndroidManifest.xml配置文件详解
- Android输入法扩展之远程输入法