360面試題
- 將一個字符串中第一次只出現一次的字母打印出來
- 解決思路
- 方案一
- 在讀取到每一個字符,對後方的字符進行遍歷結果,直到有一個只出現一次的字符結束,時間複雜度高
- 方案二
- 第一次讀取字符時,採用Hash表存儲字符,當字符出現的次數計入hash表,第二次遍歷字符串中的字符時,讀取到一個在Hash表中的只出現一次的字符就結束了。
#include<stdio.h>
char getOneShowFirst(char *str);
char getOne(char *str);
int main()
{
char *p ="abcdabcfef";
char ch ='\0';
ch = getOneShowFirst(p);
printf("第一次出現的字符是:%c",ch);
ch = getOne(p);
printf("第一次出現的字符是:%c",ch);
}
char getOneShowFirst(char *str){
char hashtable[256] ={0};
char *p = str;
char ch='\0';
while(*p!='\0')
{
ch = *p;
hashtable[(*p++)]++;
}
p = str;
while(*p!='\0')
{
ch = *p;
if(hashtable[ch]==1)
{
break;
}
}
return ch;
}
char getOne(char *str){
int i = 0;
int j = 0;
int len = strlen(str);
char ch = '\0';
char *p = str;
char flag = 0;
for(i=0;i<len;i++)
{
ch = *p;
for(j=i+1;j<len;j++)
{
if(ch == p[j])
{
flag = 1;
break;
}
}
if(flag == 0)
{
break;
}
flag = 0;
}
return ch;
}