有關這個題目可以有很多的考察方式,但是本質的乙個方法就是利用hash表,來降低時間複雜度。
先看第乙個題目,給定乙個字串,找到這個字串的第乙個不重複的字元:
在乙個字串(1<=字串長度<=10000,全部由字母組成)中找到第乙個只出現一次的字元的位置。若為空串,返回-1。位置索引從0開始。
所以**實現:
int firstnotrepeatingchar(string str);演算法:字元流:像流水一樣的字元,一去不復返,意味著只能訪問一次。if(str.empty())
int len = str.size();
int i = 0;
for(i = 0; i < len; i++)
for(i = 0; i < len; i++)
if(i == len)
return -1;
}
方法1:將字元流儲存起來
通過雜湊表統計字元流中每個字元出現的次數,順便將字元流儲存在string中,然後再遍歷string,從雜湊表中找到第乙個出現一次的字元;
方法2:雜湊表特殊處理
同樣通過雜湊表來統計字元流中每個字元,不過不是統計次數,而是儲存位置,雜湊表初始化每個鍵值對應的value均為-1,如果字元出現一次,則value等於該字元的下標,如果字元出現兩次,則value等於-2;這樣遍歷雜湊表時,最小的那個非負值就是第一次不重複的字元的下標。
注意:這種方法是不需要儲存流水的字串的。
**實現:
class solution}//insert one char from stringstream
void insert(char ch)
else if(hash_table[ch] >= 0)
++index;}}
return ch;
}private:
int hash_table[256];
int index;
};
字串處理 找到第乙個不重複的
實際上字串的處理一直是各種測試的難點。為什麼叫難點呢?因為很多字串處理,會因為處理方法的不同而導致記憶體和時間的花費差異巨大。所以說這也是別人經常說的乙個考點。今天博主也隨意寫了乙個字串的處理問題。問題描述 編寫乙個高效的函式,找到字串中首個非重複的字元。例如 tatol 首個非重複的字元時a,te...
找出字串中第乙個不重複的字元
leetcode原題位址 將字串轉換成字元陣列 使用兩層迴圈遍歷,最終根據第二層迴圈退出時的下標值來判斷是否是不重複的字元 我的 public intfirstuniqchar string s if temp i temp j if j length if i length return resu...
找出給定字串中第乙個不重複的字元
給定一串字串,找出其中第乙個不重複的字元。如 輸入 abcddcaeb1 soop 輸出 e 思路 定義liststore和liststoredel,對輸入字串str進行遍歷,對str的每乙個字元,分別在store和storedel中查詢,如果在store中存在該字元,則把store中的該字元刪除,...