首页 > 试题广场 >

字符集合

[编程题]字符集合
  • 热度指数:75657 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。

数据范围:输入的字符串长度满足  ,且只包含大小写字母,区分大小写。

本题有多组输入

输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。


输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
示例1

输入

abcqweracb

输出

abcqwer
示例2

输入

aaa

输出

a
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
	string s;
	vector<char> cvec;
	while (cin >> s)
	{
		for (int i = 0; i < s.size(); ++i)
		{
			auto beg = find(cvec.begin(), cvec.end(), s[i]);
			if (beg == cvec.end())
			{
				cvec.push_back(s[i]);
				cout << s[i];
			}
		}		
		cout << endl;
		s.clear();
		cvec.clear();
	}
	return 0;
}

编辑于 2016-08-10 19:03:10 回复(0)
#include <iostream>
#include <string>
using namespace std;


int main()
{
	string str;

	while (cin >> str)
	{
		int len = str.size();
		for (int i = 0; i < len; i++)
		{
			char ch = str[i];
			if (ch != ' ') //略过已经标记的元素
			{
				for (int j = i + 1; j < len; j++) //内层循环用于寻找相同元素
				{
					if (ch == str[j])
					{
						str[j] = ' '; //标记相同元素
					}
				}
			}
		}

		//打印
		for (int i = 0; i < len; i++)
		{
			if (str[i] != ' ')
			{
				cout << str[i];
			}
		}
		cout << endl;
	}


	return 0;
}
编辑于 2017-09-09 21:36:55 回复(1)
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String str = in.nextLine();
            //System.out.println(func1(str));
            System.out.println(func2(str));
        }
    }

    public static String func2(String str){
        StringBuilder sb = new StringBuilder();
        int[] arr = new int[58];
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (arr[ch-65] == 0){
                sb.append(ch);
                arr[ch-65] = 1;
            }
        }
        return sb.toString();
    }
    
    public static String func1(String str){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (!sb.toString().contains(ch+"")){
                sb.append(ch);
            }
        }
        return sb.toString();
    }
}
发表于 2022-02-06 11:39:00 回复(0)
1. C++ 里的 哈希表头文件原来叫  <unordered_map>

#include <iostream>
#include <string>
#include <map>
#include <unordered_map>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::unordered_map;


int main() {
    
    string inputStr;
    string outputStr;
    
    while (cin >> inputStr) {
        
        // 清空输出结果的字符串,不然二次输入会重复
        outputStr.clear();
        
        // 哈希表,记录是否已经重复
        // 由于比较短,哈希的映射为 O(1)
        unordered_map<char, bool> isStore;
        for (char i = 'a'; i <= 'z'; i++) {
            isStore.insert(std::pair<char, bool>(i, false));
        }
        for (char i = 'A'; i <= 'Z'; i++) {
            isStore.insert(std::pair<char, bool>(i, false));
        }
        
        for (unsigned long i = 0; i < inputStr.size(); i++){
            if (isStore[inputStr[i]]) {
                continue;
            }
            else {
                outputStr = outputStr + inputStr[i];
                isStore[inputStr[i]] = true;
            }
        }
        cout << outputStr << endl;
    }
    
    return 0;
}




发表于 2021-03-30 20:54:39 回复(0)
构建一个字典,key为字符,value为其在字符串中第一次出现的位置。然后对字典按value排序,将键连接成字符串即为所求。
while True:
    try:
        s = input()
        d = dict()
        for i in range(len(s)):
            if s[i] in d:
                continue
            else:
                d[s[i]] = i
        new_tuple = sorted(d.items(), key=lambda x: x[1])
        print(''.join([pair[0] for pair in new_tuple]))
    except:
        break


发表于 2020-11-11 15:45:17 回复(0)

直接用set或者unordered_set去重,根据set的size作为是否重复的判断依据,然后将不重复的字符加入输出字串

#include
#include
#include

using namespace std;

int main() {
    string tmpstr;
    while(cin >> tmpstr) {
        string outstr;
        unordered_set uset;
        int size = 0;
        for(auto s : tmpstr) {
            uset.insert(s);
            if(uset.size() > size) {
                outstr.push_back(s);
                size++;
            }
        }
        cout << outstr << endl;
    }

    return 0;
}
发表于 2020-02-20 17:32:29 回复(1)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s=sc.nextLine();
            String n="";
            for(int i=0;i<s.length();i++){//遍历字符串s的每个字符
                //String.valueOf(s.charAt(i)是把那个字符转换为字符串
                if(!n.contains(String.valueOf(s.charAt(i)))){
                    n+=String.valueOf(s.charAt(i));
                }
            }
            System.out.println(n);
        }
    }
}

发表于 2019-12-01 09:46:17 回复(0)
✭头像
#include<iostream>
#include<string>
usingnamespacestd;
intmain(){
    string s;
    while(cin>>s){
        intN[1000]={0};
        for(inti=0;i<s.length();i++){
            if(N[s[i]-'0']==0){
                cout<<s[i];
                N[s[i]-'0']++;
            }
        }
        cout<<endl;
    }
    return0;
}

发表于 2019-06-10 17:47:15 回复(0)
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;
    while(cin>>str)
    {
        int l=str.length();
        string str1={};
        for(int i=0;i<l;i++)
        {
            if(str1.find(str[i])==-1)
            {
                str1+=str[i];
            }
        }
        cout<<str1<<endl;
    }
    return 0;
}


发表于 2019-03-27 17:16:41 回复(1)
Y_P头像 Y_P
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    while(cin >> s)
    {
        string t = "";
        for(int i = 0; i < s.length(); i++)
        {
            if(t.find(s[i]) == -1)
            {
                t = t + s[i];
            }
        }
        cout << t << endl;
    }
}

发表于 2019-03-01 15:03:18 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String str=sc.next();
            int[] count=new int[266];
            for(int i=0;i<str.length();i++){
                count[str.charAt(i)]++;
                if(count[str.charAt(i)]==1)
                    System.out.print(str.charAt(i)+"");
            }
            System.out.println();
        }
    }
} 

发表于 2018-10-10 19:26:15 回复(2)
用HashSet记录字符是否已经出现过。
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()) {
            HashSet<Character> set = new HashSet<Character>();
            String str = scan.next();
            StringBuilder res = new StringBuilder();
            for(inti = 0; i < str.length(); i++) {
                if(!set.contains(str.charAt(i))){
                    set.add(str.charAt(i));
                    res.append(str.charAt(i));
                }
            }
            System.out.println(res.toString());
        }
    }
}

发表于 2018-08-28 14:43:24 回复(0)
#include <iostream>
#include <string>
#include <memory.h>
using namespace std;

int main()
{
    string s;
    while (cin >> s)
    {
        string res;
        bool visit[256];
        memset(visit, true, sizeof(visit));
        for (int i = 0; i < s.length(); i++)
        {
            if (visit[s[i]])
            {
                res.push_back(s[i]);
                visit[s[i]] = false;
            }
        }
        cout << res << endl;
    }
    return 0;
}
发表于 2018-08-21 16:32:45 回复(0)
为什么我的输出比原字符串还长,后面是一些没出现过的字符,readLine()得到的没错  遍历输出就有错
发表于 2018-07-26 09:32:32 回复(1)
#include <bits/stdc++.h>

using namespace std;

int main()
{     string s;     while(cin>>s)     {         int l = s.length();         int a[150];         memset(a,0,sizeof(a));         for(int i=0;i<l;i++)             a[s[i]]++;                  for(int i=0;i<l;i++)             if(a[s[i]]>=1)             {                 cout<<s[i];                 a[s[i]] = 0;             }         cout<<endl;     }     return 0;
}

发表于 2017-11-12 01:30:37 回复(0)
判断是否是第一次出现,复杂度为O(n^2).(也可以利用桶排序,复杂度为O(n))
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
    string a;
    while(cin >> a){
    string res = "";
    for(int i = 0; i < a.length(); i++){
        if(a.find(a[i]) == i) res = res + a[i];
    }
    cout << res << endl;
    }
    return 0;
}

发表于 2017-11-06 16:59:21 回复(0)
#include <iostream>
#include <string>
#include <string.h>
using namespace std;

int main(){
    string str;
    while(cin>>str){
        bzero(hash,sizeof(hash));
        for(string::size_type idx=0;idx<str.size();++idx){
            if(str[idx]<='z'&&str[idx]>='a'){
                if(!hash[str[idx]-'a']){
                    cout<<str[idx];
                	hash[str[idx]-'a']=1;
                }
            }else{
                if(!hash[str[idx]-'A'+26]){
                    cout<<str[idx];
                	hash[str[idx]-'A'+26]=1;
                }
            }
        }
        cout<<endl;
    }
    return 0;
}

编辑于 2017-09-04 13:13:14 回复(0)
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
char[] array = str.toCharArray();
String str0 = ""+array[0];
for (int i = 1; i < str.length(); i++) {
boolean flag=false;
for (int j = 0; j < i; j++) {
if (array[i] == array[j]) {
flag=true;
break;
}
}
if(flag==false){
str0=str0+array[i];
}
}
System.out.println(str0);
}
}
}

发表于 2017-08-05 17:33:05 回复(0)
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
    char str[100];
    while(gets(str)){
        int n=strlen(str);
        int flag =0;
        cout<<str[0];
        for(int i=1;i<n;i++){
            flag =1;
            for(int j=0;j<i;j++){
            if(str[i]==str[j]){
                flag = 0;
                break;
            }
            }
            if (flag) {
                cout<<str[i];
            }
        }
        cout<<endl;
    }
    return 0;
}
发表于 2017-07-06 19:39:57 回复(0)
#include <iostream>
#include <vector>
using namespace std;
int main(){
    string a;
    while(cin >> a){
        vector<char> result;
        int hash [128] = {0};
        for(int i = 0; i < a.size(); i++){//不相同元素才push到vector中
            int asc = a[i];
            if(!hash[asc]){
                hash[asc] = 1;
                result.push_back(a[i]);
            }               
        }
        for(int j = 0; j < result.size(); j++)
            cout<<result[j];
        cout<<endl;
    }
}

发表于 2017-06-06 21:09:56 回复(0)