字符串的输出

来源:互联网 发布:mac常用软件推荐 2016 编辑:程序博客网 时间:2024/06/05 06:49

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);}//使用HashTable可以将复杂率降低,将算法复杂度为n方的算法,复杂度将为2n,也就是nchar getOneShowFirst(char *str){    char hashtable[256] ={0}; //对应assic码中的所有字符都可以被存储    char *p = str;    char ch='\0';    //第一次循环用于记录    while(*p!='\0')//判断是否是字符串结束    {        ch = *p;        hashtable[(*p++)]++;//以字符对应的assic码为key,然后有一个就加一个            }    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;}
0 0
原创粉丝点击