[字符串处理]字节跳动19春招①

题目

  • 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 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);
	}
	
}