字串 第乙個不重複的字元

2022-04-10 12:22:34 字數 1162 閱讀 7140

有關這個題目可以有很多的考察方式,但是本質的乙個方法就是利用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中的該字元刪除,...