算法1:找出第一個非重複字符在字符串中的位置

詳細描述
對於一個字符串,爲了簡便起見,假設字符串的所有字符都是英文的。這個字符串的長度不定,可長可短,內容也不確定,可能有大寫,可能也有小寫,有重複的,比如這樣一個字符串 ”this is a test book”,這個字符串裏面有很多字符是重複的,比如t,i,o等,也有沒有重複的字符,比如h,因此這個算法的目標就是找到h,然後返回1(位置從0開始)。再比如這個字符串 ”They are working”,那麼第一個不重複的字符串是T,所以返回0。
分析1
對於這個問題,很自然的會想到,要去遍歷整個字符串,然後對每個字符進行標記,判斷這個字符串中是不是有重複的字符或者是不是有的字符沒有重複,重要的是要找到沒有重複的字符而且是第一個沒有重複的字符。
關鍵的問題就是怎麼對遍歷的字符進行標記,在不考慮效率的情況下,當然會有很多方法可以做到,我們先設計一種多次遍歷的方式來達到這個目的。
我們以 “this is a test string” 作爲例子,理論上講,我們只要兩層循環就可以找到第一個不重複的字符,外層循環從第一個字符t開始遍歷,內層循環從該字符的後一個字符h開始遍歷,如果後續的字符中有與該字符相同的字符,則內層結束循環,表示有重複字符,如果內存循環一直到字符串末尾了還沒有相同字符,則表示我們找到了第一個不重複的字符串,則外層循環結束。
外層循環從t開始,內存循環從h開始,很顯然t和h不同,所以內存循環繼續往前,依次是i,s,空格,i,s,空格a空格,好,內層循環的下一個字符是t,則到t這裏就結束了,表示找到了重複的字符,則結束內層循環,外層循環繼續,外層循環的下一個字符是h,內層循環就從i開始,可以看到後面再也沒有和h相同的字符,所以第一個不重複的字符是h,位置就是1。
似乎這個算法沒有任何問題了,但是,對於任何一個功能的代碼,我們至少需要給出兩種測試用例,成功的和失敗的,即我們至少要拿兩種測試數據進行測試,對於本算法來講,兩種測試用例是不夠的,我們至少需要四種測試用例,哪四種呢?整體上還是成功的和失敗,即能找到沒有重複的字符的字符串和不能找到沒有重複的字符的字符串串,對於可以找到沒有重複的字符的字符串,又要至少分三種情況:沒有重複的字符在字符串的開始,沒有重複的字符在字符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章