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;
}