找出字串

2021-07-13 06:32:10 字數 878 閱讀 6905

有乙個排過序的字串陣列,但是其中有插入了一些空字串,請設計乙個演算法,找出給定字串的位置。演算法的查詢部分的複雜度應該為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。思想 從頭開始擷取字串,只要後乙個元素不在擷取的字串裡,就更新擷取...