zoukankan      html  css  js  c++  java
  • 第一个只出现一次的字符

    题目描述

    在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
    思路:将每个字符作为数组下标,数组中记录出现的次数。
    代码:
        int FirstNotRepeatingChar(string str) {
            map<char,int> mp;
            int len = str.size();
            if(len == 0) return -1;
            for(int i = 0; i < len;i++)
            {
                mp[str[i]]++;
            }
            for(int i = 0; i < len;i++)
            {
                if(mp[str[i]] == 1)
                    return i;
            }
            return -1;
        }

     稍稍微微改进版的:减少了时间复杂度,第二次遍历只遍历256次即可。

        int FirstNotRepeatingChar(string str) {
            int arr[256] = {-1};
            memset(arr,-1,sizeof(arr));
            int len = str.size();
            if(len == 0) return -1;
            for(int i = 0; i < len;i++)
            {
                if(arr[str[i]]  == -1)
                    arr[str[i]] = i;
                else 
                    arr[str[i]] = -2;
            }
            int n  = len;
            for(int i = 0; i < 256;i++)
            {
                if(arr[i] != -1 && arr[i] != -2)
                {
                    if(arr[i] < n)
                        n = arr[i];
                }
            }
            if(n == len)
                n = -1;
            return n;
        }

    思路:申请256位的辅助数组,将数组置为-1,如果字符第一次出现置为字符位置,如果不是第一次置为-2,最后比较辅助数组中值不为-1和-2的,且下标最小的数。

    int型数组存的值,可以代表多种不同的意义。

  • 相关阅读:
    oracle笔记
    log4j配置
    前段页面性能标准
    递归多叉树遍历
    // 获取元素拒顶部高度
    window.parent
    webpack打包
    vue源码解析推荐文章
    在vue项目中。artTemplate引入失败问题,修改源码
    webpack打包css前缀自动取消,以及样式冲突问题
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9126298.html
Copyright © 2011-2022 走看看