Day 10 - LeetCode 290. Word Pattern

LeetCode 290. Word Pattern

題目

Given a pattern and a string str, find if str follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:
pattern = "abba", str = "dog cat cat dog" should return true.
pattern = "abba", str = "dog cat cat fish" should return false.
pattern = "aaaa", str = "dog cat cat dog" should return false.
pattern = "abba", str = "dog dog dog dog" should return false.

Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

Credits:
Special thanks to @minglotus6 for adding this problem and creating all test cases.

翻譯

給一個樣版跟一個字串,判斷字串是否有遵循樣版的格式。
這邊的遵循是說字串中的每一個詞都與樣版有一致的對應。

備註:

你可以假設同為小寫字母, 並且字串用空白分隔

想法

同LeetCode. 205

詳細參閱


Code

/**
 * @param {string} pattern
 * @param {string} str
 * @return {boolean}
 * 同LeetCode.205
 */
var wordPattern = function(pattern, str) {

    var pattern_array = pattern.split('');
    var str_array = str.split(/\s/);

    if (pattern_array.length != str_array.length) {
        return false;
    }

    var pattern_map = {};
    var str_map = {};

    for (let i = 0; i < pattern_array.length; i++) {
        var pattern_char = pattern_array[i];
        var str_char = str_array[i];

        if ( !pattern_map[pattern_char] && !str_map[str_char]) {
            pattern_map[pattern_char] = str_array[i];
            str_map[str_char] = pattern_array[i];
        }

        if (pattern_map[pattern_char] != str_array[i] || str_map[str_char] != pattern_array[i]) {
            return false;
        }
    }
    return true;
};

Run

Your input
"abba", "dog cat cat dog"
"aaaa", "dog cat cat dog"
"abba", "dog dog dog dog"

Your answer
true
false
false

Expected answer
true
false
false

Runtime: 89 ms

留言