输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足
,且只包含大小写字母,区分大小写。
本题有多组输入
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
abcqweracb
abcqwer
aaa
a
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;
}
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 直接用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;
}
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);
}
}
}
#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;
}
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();
}
}
} 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());}}}
#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;
}
#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;
} #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;
}
}
// LinkedHashSet 顺序 + 去重
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
char[] chars = sc.next().toCharArray()
// 有序集合
LinkedHashSet<Character> charSet = new LinkedHashSet<Character>();
for (int i = 0; i < chars.length; i++) {
charSet.add(chars[i]);
}
for (char c : charSet) {
System.out.print(c);
}
System.out.println();
}
sc.close();
}
#include <string>
#include <vector>
#include <iostream>
using namespace std;
// 很简洁
int main()
{
string input;
while (cin >> input)
{
string output;
vector<bool> map(256, false);
for (int i = 0; i < input.size(); i++)
{
if (!map[input[i]])
{
output += input[i];
map[input[i]] = true;
}
}
cout << output << endl;
}
return 0;
}
//Set可以保证不重复,但不能保证顺序.我们可以利用set add是否成功来判断是否重复
//积累:char转String不能toString(),因为char是基本类型不能用方法 s.charAt(i)+""
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String s=sc.nextLine();
StringBuilder sb=new StringBuilder();//结果字符串
Set<String> set = new HashSet<String>();
for(int i=0;i<s.length();i++){
if(set.add(s.charAt(i)+"")){//如set添加成功说明不重复
sb.append(s.charAt(i)+"");
}
}
System.out.println(sb.toString());
}
}
}