我在採訪中遇到了這個問題,我被困在最好的方式去了解它。問題如下:給定一個字符串序列,檢查它是否匹配一個模式
給定一個字符串序列的單詞和一個字符串序列模式,如果單詞序列匹配模式,則返回true否則返回false。
match的定義:替換變量的單詞必須始終跟隨該替換。例如,如果「f」被替換爲「猴子」,那麼任何時候我們看到另一個「f」,那麼它必須匹配「猴子」,並且每當我們再次看到「猴子」時它就必須匹配「f」。
例子
輸入:「蟻狗貓的狗」,「一個dçd」
輸出:真
這是正確的,因爲每一個變量映射到只有一個字,反之亦然。
一個 - >蟻
d - >狗
Ç - >貓
d - >狗
輸入: 「螞蟻狗貓狗」, 「ADCE」
輸出:假
這是假,因爲如果我們用「d」替代「dog」,那麼你也不能將「e」替換爲「dog」。
一個 - >蟻
d,電子 - >狗(兩個d和e不能同時地圖到狗所以假)
Ç - >貓
輸入: 「猴子狗鰻魚鰻魚」,「 efcc「
輸出:真
這是真的,因爲每個變量都只映射到一個單詞而反之亦然。
ë - >猴
的F - >狗
Ç - >鰻魚
起初,我還以爲做的事情如下...
function matchPattern(pattern, stringToMatch) {
var patternBits = pattern.split(" ");
var stringBits = stringToMatch.split(" ");
var dict = {};
if (patternBits.length < 0
|| patternBits.length !== stringBits.length) {
return false;
}
for (var i = 0; i < patternBits.length; i++) {
if (dict.hasOwnProperty(patternBits[i])) {
if (dict[patternBits[i]] !== stringBits[i]) {
return false;
}
} else {
dict[patternBits[i]] = stringBits[i];
}
}
return true;
}
var ifMatches = matchPattern("a e c d", "ant dog cat dog");
console.log("Pattern: " + (ifMatches ? "matches!" : "does not match!"));
不過,我意識到這韓元」 t工作並且因爲它錯誤地返回true而使示例#2失敗。解決此問題的一種方法是使用雙向字典或兩個字典,即存儲{「a」:「ant」}和 {「ant」:「a」},並檢查if檢查中的兩種情況。但是,這似乎是浪費空間。有沒有更好的方法來解決這個問題,而不使用正則表達式?
您對比賽的定義不清楚。寫一些解釋爲什麼第一個例子通過,第二個失敗。我可以猜出爲什麼,但很可能你不是在這裏聽到猜測。你只是比較單詞的第一個字母嗎? –