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