Jagadish, K.

Word pattern

Published on

Question

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.

Example 1:

Input: pattern = "abba", str = "dog cat cat dog"
Output: true

Example 2:

Input:pattern = "abba", str = "dog cat cat fish"
Output: false

Example 3:

Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false

Example 4:

Input: pattern = "abba", str = "dog dog dog dog"
Output: false

Notes:

  • You may assume pattern contains only lowercase letters, and str contains lowercase letters that may be separated by a single space.

Solution

/**
 * @param {string} pattern
 * @param {string} str
 * @return {boolean}
 */
var wordPattern = function(pattern, str) {
    const words = str.split(' ');
    const patToWord = {};
    const wordToPat = {};
    const len = words.length;

    let i = 0;
    let word;
    let lex;

    if(len == 1){
        return pattern.length == 1;
    }

    while(i < len){
        word = words[i];

        if(!patToWord[pattern[i]] && !wordToPat[word]){
            patToWord[pattern[i]] = word;
            wordToPat[word] = pattern[i];
        } else if(wordToPat[word]){
            if( wordToPat[word] != pattern[i] ){
                return false;
            }
        } else {
            return false;
        }

        i++;
    }
    return true;
};

If you think somebody would benefit from reading this post, please share away and help me reach more people.