2012-10-05 20 views
1

我在Matlab中使用containers.Map類作爲字典,我想查找不在我的地圖中的第一個子字符串(從左到右)。查找第一個子字符串不在地圖中

例如,假設我有串「數學」,我的地圖是這樣的

 
key value 
m  1 
ma  2 
.  . 
.  . 
.  . 

所以,如果我開始從左讀到右邊的第一子沒有在地圖中會「墊'

這使我想到的答案顯然是循環每一個字符,並做一些串聯,以便找到的子字符串使用方法iskey,是不是在我的地圖(地圖,鍵),其中關鍵是在子每次迭代。

有沒有更高效的做到這一點?也許在matlab中有一些預定義的函數,或者至少有一個更優雅的代碼。

謝謝

+0

有趣的問題!我想不出一種既高效又合理簡單的方法。我想到的「更有效率」的方式包括將地圖重寫爲樹結構,以便循環的每次迭代都需要一次查找和一次比較測試......您是在尋找簡單的東西,還是阻礙了性能某種程度上來說?你所描述的方法很簡單,可以作爲一個函數來編寫,所以我個人只是想說明一下。 –

+0

您能否指出我們走向哪個階段,您認爲最需要時間?一種可能的加速是iskey()可以一次搜索多個鍵。我不知道這是如何實現的,但它可能不會比多個iskey()慢,並且至少可以爲您節省循環。原則上,如果你想保存查找數據結構必須能夠節省時間搜索多個鍵,這可能是可能的,如果它是一棵樹,並且有一個聰明的iskey()實現... – Bitwise

+0

事實上,我正在尋找爲了達到同樣的更簡單的方式,我對速度性能不太感興趣。 –

回答

1

這個怎麼樣。

map = containers.Map;

% Initialise map 
map('m') = 1; 
map('ma') = 2; 
map('burt') = 3; 

% Define search string 
m = 'math'; 

% Create cell array element for first 1,2,3... letters of search 
ma = repmat(m,length(m),1); 
ma = cellstr(char(ma .* tril(ones(length(m))))); 

% Find first substring that isn't in map 
index = find(~map.isKey(ma),1,'first') 
+0

這比循環解決方案更優雅,謝謝! –

相關問題