首页 > 试题广场 >

删除重复字符

[编程题]删除重复字符
  • 热度指数:15803 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母'a'和字母'n'分别出现了三次和两次。
但是牛牛不喜欢重复。对于同一个字母,他只想保留第一次出现并删除掉后面出现的字母。请帮助牛牛完成对s的操作。

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


输出描述:
输出一个字符串,表示满足牛牛要求的字符串
示例1

输入

banana

输出

ban
//比特位表示字母是否出现
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String res = "";
        int flag = 0;
        for(int i=0;i<s.length();i++){
            int temp = 1<<(s.charAt(i)-'a');
            if((temp&flag)==0) {//第一次出现
                res+=s.charAt(i);
                flag|=temp;
            }
        }
        System.out.print(res);
    }
}

发表于 2019-03-18 19:13:06 回复(1)
//建表
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;
    int WordTable[26] = { 0 };
    while (cin >> str)
    {
        for (char c : str)
            if (WordTable[c - 'a'] == 0)
                WordTable[c - 'a'] = 1,cout<<c;
        cout << endl;
    }
    return 0;
}
发表于 2019-03-11 16:56:01 回复(1)
JAVA  
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner (System.in);
		String str=cin.next();
		int a=str.length();
		String s="";
		String s1=String.valueOf(str.charAt(0))+s;
		for(int i=1;i<a;i++) {
			if(s1.contains(String.valueOf(str.charAt(i)))==true)continue;
			else {
				s1=s1+String.valueOf(str.charAt(i))+s;
			}
		}
		System.out.print(s1);

	}

}

发表于 2019-11-05 16:39:33 回复(0)
s = raw_input()
res = ''
for string in s :
    if string not in res :
        res = res + string
print(res)

发表于 2019-02-15 17:47:28 回复(0)
import java.util.Scanner;
import java.util.Set;
import java.util.LinkedHashSet;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            System.out.println(helper(in.nextLine()));
        }
    }
    public static String helper(String s){
        Set<Character> set = new LinkedHashSet<>();
        char[] cs = s.toCharArray();
        for(char c:cs){
            set.add(c);
        }
        StringBuffer sb = new StringBuffer();
        for(char c:set){
            sb.append(c);
        }
        return sb.toString();
    }
}


发表于 2019-01-15 21:40:30 回复(1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(const int argc, const char* argv[]) {
  int32_t state = 0;
  char input[1024] = { 0 }, ans[1024] = { 0 };
  
  fgets(input, 1024, stdin);
  const char* p = input;
  while (*p) {
    if (state & 1 << *p - 97) {
      ++p;
      continue;
    }
    state |= 1 << *p - 97;
    strncat(ans, p++, 1);
  }
  
  return fputs(ans, stdout),  0;
}

发表于 2021-07-13 12:18:49 回复(0)
#include <iostream>
#include <math.h>
#include <cstdio>
#include<algorithm>
#include<string>
#include<stdlib.h>
#include<map>
#include<stdio.h>
using namespace std;

int main()
{
  string s,res="";
  cin>>s;
  map<char,bool> Num;
    for(int i=0;i<s.length();i++)
    {
        char temp=s[i];
        if(Num.count(temp)==0)//if(!Num.count(temp))//未出现字符
        {
             res+=s[i];
            Num[temp]++;
        }
    }
    cout<<res<<endl;
        return 0;
}

发表于 2020-05-26 23:35:43 回复(0)
array=input()
s=list(set(list(map(str,array))))
s.sort(key=array.index) print(''.join(str(i) for i in s))
发表于 2019-08-14 22:15:08 回复(0)

java使用HashSet保存出现过的字母。

import java.util.HashSet;
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        StringBuilder sb = new StringBuilder();
        sb.append(str);
        HashSet<Character> set = new HashSet();
        for (int i = 0; i < sb.length(); i++) {
            if (set.contains(sb.charAt(i))) {
                sb.setCharAt(i, '0');
            }
            set.add(sb.charAt(i));
        }
        System.out.println(sb.toString().replace("0", ""));
    }
}
发表于 2019-06-14 21:23:16 回复(0)
//用桶排序
#include<iostream>
#include<string>
using namespace std;
int main(){
    string str;
    cin >> str;
    int a[26] = { 0 };
    for (int i = 0; i < str.size(); i++){
        a[str[i] - 'a']++;
        if (a[str[i] - 'a'] == 1)
            cout << str[i];
    }
    cout << endl;
    return 0;
}
发表于 2019-04-20 18:04:21 回复(0)
一个string 一个遍历即可。
#include<iostream>
#include<string>
using namespace std;

int main()
{
    string a;
    cin>>a;
    int Re[26]={0};
    for(int i = 0;i<a.length();i++){
        if(Re[a[i]-'a']==0)
            cout<<a[i];
        Re[a[i]-'a']++;
    }
    return 0;
}

编辑于 2019-04-15 16:53:45 回复(2)
字母表  python速解
import string
adist=dict.fromkeys(string.ascii_lowercase, 0)
for i in input():
    if adist[i]==0:
        adist[i]+=1
        print(i,end='')

编辑于 2019-04-12 09:19:04 回复(0)
while True:
    try:
        s = input()
    except:
        break
    ss = set()
    res = ''
    for c in s:
        if c not in ss:
            res += c
            ss.add(c)
    print(res)

发表于 2019-03-18 10:07:39 回复(0)
##Python

s=input()
s2=list(set(s))        #去掉重复元素后的列表
s2.sort(key=s.index)   #对s2的元素按照原来的顺序排序
print(''.join(s2))

编辑于 2019-03-17 21:29:42 回复(0)
桶,用于存放字符出现次数
#include<stdio.h>
#include<string.h>
char str[1100];
int jar[30];
int main(){
    scanf("%s",str);
    int i=0;
    memset(jar,0,sizeof(jar));
    while(str[i]){
        if(!jar[str[i]-'a']) printf("%c",str[i]);
        jar[str[i++]-'a']++;
    }
    return 0;
}

编辑于 2019-02-13 10:10:09 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{     string s;     while(cin>>s){         int n = s.length();         bool a[26]={false};         string r;         for(int i=0;i<n;i++){             if(a[s[i]-'a']==false){                 r += s[i];                 a[s[i]-'a'] = true;             }         }         cout<<r<<endl;     }     return 0;
}

发表于 2019-02-05 03:31:41 回复(0)
# coding=utf-8

def fun():
    s = raw_input()
    alphabet_hash = [0]*26
    result = ''
    for i in range(len(s)):
        if alphabet_hash[ord(s[i])-ord('a')]==0:
            alphabet_hash[ord(s[i])-ord('a')]=1
            result = result + s[i]
    return result

if __name__=='__main__':
    print(fun())

编辑于 2019-01-30 10:13:03 回复(0)
#include<iostream>
#include<map>

using namespace std;

int main() {
    string s, ans = "";
    map<char, bool> map;
    cin >> s;
    for (int i = 0; i < s.size(); i++) {
        if (!map.count(s[i])) {
            ans += s[i];
            map[s[i]] = true;
        }
    }
    cout << ans << endl;
    return 0;
}
发表于 2019-01-23 00:56:14 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
 int letter[26],length,i;
 memset(letter,0,sizeof(letter));
 char str[1000];
 gets(str);
 length=strlen(str);
 for(i=0;i<=length-1;i++)
 {
  if(letter[str[i]-'a']==0)
  letter[str[i]-'a']=1;
  else
  str[i]=0;
 }
 for(i=0;i<=length-1;i++)
 {
  if(str[i]!=0)
  printf("%c",str[i]);
 }
 return 0;
}

发表于 2019-01-10 11:20:32 回复(0)
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
    string s,tmp;
    tmp = "";
    map<char,int> Mymap;
    cin>>s;
    for(int i = 0;i < s.size();i++)
    {
        if(Mymap[s[i]] == 0)
        {
            Mymap[s[i]] ++;
            tmp = tmp + s[i];
        }
    }
    cout<<tmp;
    return 0;
}
发表于 2019-01-10 11:03:26 回复(0)