摘要: 考察对KMP的next数组的掌握,next数组也就是失败指针指向它失败后应该指向的位置,next[i]~i之间就是一个循环节,所以只要满足i%(i-next[i])==0即可。#include <string.h>#include <stdio.h>int cas=1,n;char s[1000005];int next[1000005];void solve(){ next[1]=0; int len=strlen(s+1); for(int i=2,j=0;i<=len;i++){ while(j>0&&s[i]!=s[j+1])j=ne 阅读全文
posted @ 2012-08-02 23:27 Burn_E 阅读(153) 评论(0) 推荐(0)
摘要: 给出一个字符串S1和S2,可以对S1进行添加字符(insert),删除字符(delete),替换字符(replace),交换相邻字符(swap)四种操作,问是否能在dis步骤内将S1转换成S2。 用d[i][j]表示将S1[1..i]转化为S2[1..j]的最小步数。 这几种操作可以表示为:添加d[i][j]=d[i][j-1]+1,删除d[i][j]=d[i-1][j]+1,替换d[i][j]=d[i-1][j-1]+1,交换d[i][j]=d[i-2][j-2]+1(条件为s1[i-1]==s2[j]&s1[i]==s2[j-1])。 但是仅考虑到这些还是过不了这道题的,因为交换. 阅读全文
posted @ 2012-08-02 14:35 Burn_E 阅读(443) 评论(0) 推荐(0)