zoukankan      html  css  js  c++  java
  • 查找字符串中首个非重复字符

    题目描述:编写一个高效函数,找到字符串中首个非重复字符。如"total"首个非重复字符为'o',"teeter"为'r'。(时间复杂度最好为O(N))

    思路:字符串仅限于使用ASCII码,可以用一数组来存放各个字符出现的次数,然后按字符串顺序找出首个次数为1的字符,并打印出来。

    时间复杂度:遍历字符串O(N),找出首个次数为1 的字符最坏情况O(N),故总的时间复杂度O(N);

    代码如下

    View Code
     1 #include<stdio.h>
     2 //找字符串中首个非重复字符,如"total"首个非重复字符为'o',"teeter"为'r'。
     3 void firstNonRepeated(char *str)
     4 {
     5     if (NULL == str)
     6     {
     7         return;
     8     }
     9     int asc[256] = {0};
    10     char *p = str;
    11     while (*p != '\0')
    12     {
    13         asc[*p]++;
    14         p++;
    15     }
    16 
    17     p = str;
    18     while (*p != '\0')
    19     {
    20         if (asc[*p] == 1)
    21         {
    22             printf("%c\n", *p);
    23             break;
    24         }
    25         p++;
    26 
    27     }
    28     
    29 }
    30 
    31 int main()
    32 {    
    33     char str1[] ="total";
    34     char str2[] ="teeter";
    35     firstNonRepeated(str1);
    36     firstNonRepeated(str2);
    37     return 0;
    38 }


    还有别的方法使用hashtable,不过感觉比较麻烦,而且我不太会用。。。但是使用hashtable可以优化空间复杂度。

    不经历风雨,怎么见彩虹!
  • 相关阅读:
    My 1st webUI try
    option(recompile)
    Add&Delete WindowService
    powershell
    bootstrap模态框,等待遮盖层
    spring-boot通过@Scheduled配置定时任务
    bootstrap-table的一些参数配置
    $('xx')[0].files[0]的意思
    Go国内镜像
    基础语法-defer使用(12)
  • 原文地址:https://www.cnblogs.com/ivorfeng/p/2988307.html
Copyright © 2011-2022 走看看