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

    第一个只出现一次的字符位置

    题目描述

    在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

    使用哈希表来进行存储, 由于不能使用哈希表进行遍历, 所以还是用源字符串进行遍历

    刚开始不理解为什么时间复杂度是O(n), 现在明白了, 第一个for是O(n), 第二个for也是O(n), 两个大O相加后时间复杂度是O(n), 下面是两个大O相乘

    class Solution {
    public:
        int FirstNotRepeatingChar(string str) {
            const int tableSize = 256;
            vector<int> vt;
            vt.resize(tableSize);
            for (int i = 0; i < str.length(); i++) {
                vt[str[i]]++;
            }
            for (int i = 0; i < str.length(); i++) {
                if (1 == vt[str[i]]) {
                    return i;
                }
            }
            return -1;
        }
    };
    

    使用stl库中的map, map内部使用红黑树, 因此不能使用map进行遍历, 还需要用源字符串进行遍历, 话说是字符串中出现的位置, 好像就要用源字符串进行遍历

    class Solution {
    public:
        int FirstNotRepeatingChar(string str) {
            map<char, int> my_map;
            for (auto i = 0; i < str.length(); i++){
                my_map[str[i]]++;
            }
            for (auto i = 0; i < str.length(); i++) {
                if (1 == my_map[str[i]]) {
                    return i;
                }
            }
            return -1;
        }
    };
    

    暴力方法, 没什么技术含量

    class Solution {
    public:
        int FirstNotRepeatingChar(string str) {
            int position = 0;
            
            while (position < str.length()) {
                for (int i = 0; i < str.length(); i++) {
                    if (i == position)
                        continue;
                    if (str[position] == str[i])
                        break;
                    if (i == str.length() - 1)
                        return position;
                }
                position++;
            }
            
            return -1;
        }
    };
    
  • 相关阅读:
    hdu 1863 畅通工程(Kruskal+并查集)
    1.1.2最小生成树(Kruskal和Prim算法)
    1.1.1最短路(Floyd、Dijstra、BellmanFord)
    ACM复习专项
    装饰器和偏函数
    Python函数基础
    (六)面向对象高级编程
    Zabbix漏洞利用 CVE-2016-10134
    Struts-S2-045漏洞利用
    F5 BIG-IP 远程代码执行漏洞环境搭建
  • 原文地址:https://www.cnblogs.com/hesper/p/10522148.html
Copyright © 2011-2022 走看看