今日头条2019万万没想到之聪明的编辑

双指针思想,就和Leetcode392差不多;

但是这个题如果做法不对的话很可能会超时;

下面这不是我AC的代码,我从网上找的别人的代码;只不过是我加了个注释;

 

#include 
using namespace std;

char s[1000010];//创建一个比最大字符串长度长的字符数组 
int main()
{
    int t;cin>>t;
    while(t--)
    {
    	//主要是用了一下双指针思想
    	
        cin>>s;
        int k=0;
        for(int i=0;s[i];i++)
        {
            s[k++]=s[i];
			//因为每次是删除一个字符,也就相当于把k向后移动一位
			//这样就相当于把第三个字符删去了;因为第二种情况下是删除aabb的最后一个b字符; 
			//也就是 比如 188899  这样的话就是把第三个8用后面的数值给覆盖了,也就相当于删除了;
			// 			  188 99 
            if(k>=3&&s[k-1]==s[k-2]&&s[k-2]==s[k-3])k--;
            /*
            我开始是这样写的
			if( s[k]==s[k+1]&&s[k+2]==s[k+3]&&k=4&&s[k-4]==s[k-3]&&s[k-2]==s[k-1])k--;
        }
        //因为我们只是覆盖了前面的内容,并不是删除了,所以得加个'\0'来作为结束条件,我不知道为啥string加个'\0',然后输出的就是一个空格,而不是结束的标志; 
		 
        s[k]='\0';
        cout<

 

你可能感兴趣的:(题解)