在乙個字串(0<=字串長度<=10000,全部由字母組成)中找到第乙個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫).
我的思路:
第一次遍歷string,用乙個map記錄每個字元出現的次數
第二次遍歷map,找到次數為1的字元
第三次遍歷string,找到該字元出現的位置。
問題:
map中鍵值對的順序並不是按插入順序來的,最後會按key值公升序排列。所以找到的出現次數為1的字元可能不是第乙個。
#include#includeclass solution
bool flag = false;
for(iter = mymap.begin(); iter != mymap.end(); iter++)
}if(flag)
}return firstcharpos;
}};
其實沒必要遍歷三次,只需遍歷兩次。第二次遍歷string,看該字元出現的次數是不是為1.。這樣找到的第乙個字元就是第乙個出現次數為1的字元。
#include#includeclass solution
for(int i = 0; i < len; i++)
}return -1;
}};
書上**用乙個大小為256(乙個字元用8bit表示)的陣列實現了hashmap,與直接用map在查詢某鍵值的時間效率上有不同麼?陣列實現的話查詢與修改都是o(1)。 劍指offer 第乙個只出現一次的字元
在乙個字串 1 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置 我們遍歷這個字串,假設每個當前字元都是只出現一次的,我們分別向前和向後考察是否存在相同字元 向前考察 儲存乙個vector裡面存放所有已知的已經重複過的字元,如果當前字元跟這個vector裡面的字元相...
劍指offer 第乙個只出現一次的字元
在乙個字串 0 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置,如果沒有則返回 1.將字串轉化成陣列,兩個迴圈,外層迴圈遍歷這個陣列i,內層迴圈也是從0 開始遍歷j,判斷i對應的元素和j對應的元素是否相等,相等的話就說明不是要求的位置,直接開始判斷下乙個元素i p...
劍指offer 第乙個只出現一次的字元
問題 在乙個字串 0 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置,如果沒有則返回 1 需要區分大小寫 我們的目的是從一串字元中找到第乙個只出現一次的字元,對於這種問題沒有好的方法,就是先遍歷一遍字串使用字典統計每個字元的個數,最重要的是使用queue這樣乙個l...