列表

详情


QY4. 删除重复字符

描述

牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母'a'和字母'n'分别出现了三次和两次。
但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。

输入描述

输入包括一个字符串s,s的长度length(1 ≤ length ≤ 1000),s中的每个字符都是小写的英文字母('a' - 'z')

输出描述

输出一个字符串,表示满足牛牛要求的字符串

示例1

输入:

banana

输出:

ban

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-08

#include "stdio.h"
#include "string.h"
int main(int argc, char **argv)
{
    char letter_valid[32] = {0};
    char s[1000];
    char ascii_a = 0x61;
    char out[100]={0};
    int i,j;
    scanf("%s",s);
    
    for(i=0,j=0;s[i];i++)
    {
        if(letter_valid[s[i]-ascii_a] == 0)
        {
            out[j++] = s[i];
            letter_valid[s[i]-ascii_a] = 1;
        }
    }
    
    printf("%s",out);
    
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2019-04-10

#include<stdio.h>
#include<stdlib.h>
#define   LEN   1000
int main(){
   /* int i,j = 0;
    int n = 0;
    char s[LEN];
    char a[1000] = {0};
    n = gets(s);
   // getchar();   
    for(i=0;s[i];i++)
    {
        a[s[i]]++;
        if(a[s[i]]==1)
            printf("%c",s[i]);
    }
    return 0;
    */
    
        int a[256]={0},i;
    char s[1000];
    gets(s);
    for(i=0;s[i];i++)
    {
        a[s[i]]++;
        if(a[s[i]]==1)
            printf("%c",s[i]);
    }
    return 0;
    
}

C 解法, 执行用时: 2ms, 内存消耗: 232KB, 提交时间: 2019-02-07

#include<stdio.h>
#include<string.h>



int main(){
    char string[1000];
    char first_show[1000];
    scanf("%s", &string);
    int length1 = strlen(string);
    int length2 = 0;
    
    for(int i = 0;i < length1;i++){
    	int flag = 1;
     	for(int j = 0; j < length2;j++){
     		if(string[i] == first_show[j]){
     			flag = 0;
     			break;
			}
			else
			 	flag = 1;
		}
		if(flag == 1){
			first_show[length2] = string[i];
			length2++;	
		}
    }
    for(int i = 0;i < length2;i++){
    	printf("%c", first_show[i]);
	}

    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-02-01

#include<stdio.h>
#include<string.h>
int main(void)
{
    int a[256]={0},i;
    char s[1000];
    gets(s);
    for(i=0;s[i];i++)
    {
        a[s[i]]++;
        if(a[s[i]]==1)
            printf("%c",s[i]);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-10

#include <stdio.h>
#include <string.h>

int main()
{
    char s[1010];
    while(scanf("%s",s)!=EOF)
    {
        int arr[26]={0};
        for(int i=0;i<strlen(s);i++)
            arr[(int)s[i]-97]=1;
        for(int i=0;i<strlen(s);i++)
        {
            if(arr[(int)s[i]-97]!=0)
            {
                printf("%c",s[i]);
                arr[(int)s[i]-97]=0;
            }
        }
        printf("\n");
    }
    return 0;
}

上一题