有乙個排過序的字串陣列,但是其中有插入了一些空字串,請設計乙個演算法,找出給定字串的位置。演算法的查詢部分的複雜度應該為log級別。
給定乙個string陣列str,同時給定陣列大小n和需要查詢的string x,請返回該串的位置(位置從零開始)。
測試樣例:
["a","b","","c","","d"],6,"c"返回:3
解題思路:二分法。如果mid為空字串,那麼找到左側第乙個非空字串進行判斷。
這是一道二分查詢 的變形題目。唯一的關注點就是當str[mid] == ""時的處理,此時僅通過str[mid]=""是無法判斷目標是在mid的左邊還是右邊。所以,我們遍歷mid左邊的元素找到第乙個不是空字串的元素。
如果mid左邊的所有元素都是空字串,則去掉令s=mid+1;
否則 找到第乙個不是空字串的元素下標為s1
(1)如果str[s1]等於目標正好返回。
(2)如果str[s1]大於目標,則說明目標在str[s1]左邊,令e= s1- 1。
(3)如果str[s1]小於目標,則說明目標在str[mid]右邊,令s= mid + 1
class finder
if (str[s1].compare(x)>0)
else if (str[s1].compare(x) == 0)
else if (str[s1].compare(x) < 0) //mid左側全部是空字串或者左邊第乙個非空字串比x小
return index;
} int findstring(vectorstr, int n, string x)
};
找出字串
有乙個排過序的字串陣列,但是其中有插入了一些空字串,請設計乙個演算法,找出給定字串的位置。演算法的查詢部分的複雜度應該為log級別。給定乙個string陣列str,同時給定陣列大小n和需要查詢的string x,請返回該串的位置 位置從零開始 測試樣例 a b c d 6,c 返回 3 思路 二分查...
找出字串的所有子字串
字首樹實現,遍歷字串。把字串中的每乙個字元都視為字首,用乙個字首樹儲存以每乙個字元為開頭的字串 舉例為 abbc 然後遍歷字首樹,把每個子樹的每一層都作為乙個字串輸出即可。import copy class trienode object def init self,word self.word w...
找出字串的最長不重複字串
這是我遇到的一道校招題目 給定一字串只包含數字,請寫乙個演算法,找出該字串中的最長不重複子串 不重複是指子串中每一元素不同於子串中其他元素 如 120135435 最長不重複子串為 201354 要求用j a或者c來寫,我用了j a。思想 從頭開始擷取字串,只要後乙個元素不在擷取的字串裡,就更新擷取...