面试题35:第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如果输入“abaccdeff”,则输出'b'
解题思路:哈希。num[ch]记录字符ch出现的次数。
#include<iostream> using namespace std; int main() { int num['z'+1]; string s; cin>>s; memset(num,0,sizeof(num)); for(int i=0;s[i]!='\0';i++) num[s[i]]++; for(int i=0;s[i]!='\0';i++) { if(num[s[i]]==1) { cout<<s[i]<<endl; break; } } system("pause"); return 0; }
小变形:定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串出现过的所有字符。
解题思路:第一反应是将2个字符串排序(需要记录原来的位置),然后逐个删除。时间复杂度为O(nlogn)
哈希:思路同上,int apr[ch]用来记录第二个字符串中字符ch出现次数。时间复杂度O(n)