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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM