输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。
数据范围:输入的字符串长度满足 ,且只包含大小写字母,区分大小写。
本题有多组输入
每组数据输入一个字符串,字符串最大长度为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()); } } }