zoukankan      html  css  js  c++  java
  • 面试题之在字符串中查找出第一个只出现一次的字符的位置

    样例:比如“abcdabc”,第一个只出现一次的字符为d,位置为3

    解决方案1:O(n*n)的复杂度

    遍历字符串中的每个字符,然后用该字符在字符串中进行查找,如果没有找到和当前字符相同的字符。则当前字符为第一个 只出现一次的字符。

    解决方案2:O(n)的复杂度

    采取空间换时间的策略

    开一个辅助数组,做哈希映射

    第一次扫描时,更新在辅助数组中当前字符出现的次数。

    hash查找的时间复杂度为o(1)

    第二次扫描时,在辅助数组中通过查辅助数组看当前字符是否只出现了一次,从头到尾的顺序遍历保证了“第一个”,辅助数组的查找保证了“只出现一次”。

    code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        string str="abcdabc";
        //在字符串中查找出第一个只出现一次的字符
    
        //o(n) 空间换时间
        int a[300];
        memset(a,0,sizeof(a));
    
        //第一次遍历 统计各字符出现次数
        for(int i=0;i<str.length();i++)
        {
            a[str[i]]++;
        }
    
        //第二次遍历 辅助数组做哈希映射
        int pos=-1;
        for(int i=0;i<str.length();i++)
        {
            if(a[str[i]]==1)
            {
                pos=i;
                break;
            }
        }
        cout<<pos<<endl;
        return 0;
    }
  • 相关阅读:
    第二次冲刺 站立会议7
    第二次冲刺 站立会议6
    第二次冲刺 站立会议5
    第二次冲刺 站立会议4
    第二次冲刺 站立会议3
    第二次冲刺 站立会议2
    第二次冲刺 站立会议1
    第一次冲刺 站立会议9
    第一次冲刺 站立会议8
    第一次冲刺 站立会议7
  • 原文地址:https://www.cnblogs.com/yinbiao/p/10469880.html
Copyright © 2011-2022 走看看