zoukankan      html  css  js  c++  java
  • 剑指Offer

    剑指Offer - 九度1283 - 第一个只出现一次的字符
    2013-11-21 21:13
    题目描述:

    在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。

    输入:

    输入有多组数据
    每一组输入一个字符串。

    输出:

    输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。

    样例输入:
    ABACCDEFF
    AA
    样例输出:
    1
    -1
    题意分析:
      题目要求给定一个大写字母的字符串,找出第一个只出现了一次的字符的下标,从0开始。
      由于ascii字符不过128个,用长度为256的数组就能记录下每个字符第一次出现的下标。另外定义EMPTY表示字符未出现过,DUPLICATED表示字符已经重复出现了。
      对于每一个字符,
        若计数为EMPTY,则记录当前下标。
        若记录为正数,表示此字符出现了一次,置为DUPLICATED。
        若为DUPLICATED,说明已经重复过了,不用再改。
      扫一遍整个字符串和统计数组,时间复杂度strlen(str) + 256,数组空间复杂度256。选出最小的下标值即为不重复第一个字符。
     1 // 652691    zhuli19901106    1283    Accepted    点击此处查看所有case的执行结果    1020KB    771B    10MS
     2 // 201311171707
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     const int MAXN = 10005;
     9     int i;
    10     char s[MAXN];
    11     int c[256];
    12     int min_index;
    13     const int EMPTY = -1;
    14     const int DUPLICATED = -2;
    15     
    16     while(scanf("%s", s) == 1){
    17         i = 0;
    18         for(i = 0; i < 256; ++i){
    19             c[i] = EMPTY;
    20         }
    21         i = 0;
    22         while(s[i] != ''){
    23             if(c[s[i]] == EMPTY){
    24                 c[s[i]] = i;
    25             }else{
    26                 c[s[i]] = DUPLICATED;
    27             }
    28             ++i;
    29         }
    30         min_index = EMPTY;
    31         for(i = 0; i < 256; ++i){
    32             if(c[i] > 0){
    33                 if(min_index == EMPTY){
    34                     min_index = c[i];
    35                 }else{
    36                     min_index = c[i] < min_index ? c[i] : min_index;
    37                 }
    38             }
    39         }
    40         printf("%d
    ", min_index);
    41     }
    42     
    43     return 0;
    44 }
  • 相关阅读:
    系统文件夹路径的系统宏定义
    大数问题:用字符串解决大数相加和相乘
    C++中四种类型转换方式(ynamic_cast,const_cast,static_cast,reinterpret_cast)
    浅谈bitmap算法
    linux分享一:网络设置
    php分享十六:php读取大文件总结
    面试题一:linux面试题
    php分享十五:php的命令行操作
    查询系统负载信息 Linux 命令详解
    Linux守护进程
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3436379.html
Copyright © 2011-2022 走看看