题目
- 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
- 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
- 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC
示例


解法
看了双指针提示自己写的一版,一开始在前面竟然写了一个if判断来排除长度小于3的字符串,仔细一看发现是画蛇添足。根本不用担心在k<3的时候k-3溢出的问题,因为&&符号是短路操作,第一项如果为false就不会继续计算。
#include <cstdio> #include <string.h> using namespace std; static int maxn = 256; int main(){ int n,k; char s[maxn]; char a[maxn]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s",s); k=0; memset(a,0,sizeof(a)); for(int j=0;s[j];j++){ if(k>=2&&a[k-2]==a[k-1]&&a[k-1]==s[j]){ continue; } if(k>=3&&a[k-3]==a[k-2]&&a[k-1]==s[j]){ continue; } a[k++]=s[j]; } printf("%s\n",a); } }