1. 程式人生 > >面試題之在字符串中查找出第一個只出現一次的字符的位置

面試題之在字符串中查找出第一個只出現一次的字符的位置

c++ bit int 相同 出現一次 試題 ems 出現次數 更新

樣例:比如“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; }

面試題之在字符串中查找出第一個只出現一次的字符的位置