列表

详情


AB5. 点击消除

描述

牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?

输入描述

一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述

一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。

示例1

输入:

abbc

输出:

ac

示例2

输入:

abba

输出:

0

示例3

输入:

bbbbb

输出:

b

原站题解

C 解法, 执行用时: 4ms, 内存消耗: 384KB, 提交时间: 2022-08-06

#include<stdio.h>
int main(){
    char a[300001],*p,b;
    p=&a[1];
    while(1){
        b=getchar();
        if(b=='\n'){
			*p='\0';
			break;
		}else{
			*p=b;
            if(*p==*(p-1)){
                p--;
            }else p++;
        }
    }
    if(a[1]=='\0')
	    printf("0");
    else {
    	p=&a[1];
    	printf("%s",p);
    }
    return 0;
}

C 解法, 执行用时: 4ms, 内存消耗: 384KB, 提交时间: 2022-07-07

#include<stdio.h>
#define max 300000
int main()
{
    char a[max],*p,b;int c;
    p=a;
    while(1){
        b=getchar();
        if(b=='\n'){*p='\0';break;}
        else
        {*p=b;
            if(*p==*(p-1)&&p!=a)
            {
                p--;
            }else p++;
        }
    }
    if(a[0]=='\0')printf("0");
    else printf("%s",a);
    return 0;
}

C 解法, 执行用时: 4ms, 内存消耗: 416KB, 提交时间: 2022-07-01

#include<stdio.h>
int main()
{
    char str[3000001];
    
    char *p = str;
    
    char a;
    while(1)
    {
        a = getchar();
        if(a == '\n')
        {
            *p = '\0';
            break;
        }
        *p = a;
        if(*p == *(p-1)&&p!=str)
        {
            p--;
            continue;
        }
        p++;
    }
    if('\0'!=str[0])
        printf("%s",str);
    else
        printf("0");
    
}

C 解法, 执行用时: 4ms, 内存消耗: 416KB, 提交时间: 2022-06-18

#include <stdio.h>
 
 
int main(){
     
    char str[3000001];
     
    char *p = str;
     
    char a;
    while(1)
    {
         
        a = getchar();
        if('\n' == a )
        {
            *p = '\0';
            break;
        }
         
        *p = a;
        if(*p == *(p-1) && p != str){
            p--;
            continue;
        }
        p++;
            
    }
    if('\0' != str[0])
    printf("%s" , str);
    else
    printf("0");
}
     
     
     
     

C 解法, 执行用时: 4ms, 内存消耗: 416KB, 提交时间: 2022-04-02

#include <stdio.h>


int main(){
    
    char str[3000001];
    
    char *p = str;
    
    char a;
    while(1)
    {
        
        a = getchar();
        if('\n' == a )
        {
            *p = '\0';
            break;
        }
        
        *p = a;
        if(*p == *(p-1) && p != str){
            p--;
            continue;
        }
        p++;
           
    }
    if('\0' != str[0])
    printf("%s" , str);
    else
    printf("0");
    
    
    
    
    
}

上一题