Word Pattern

来源:互联网 发布:db2导出表数据命令 编辑:程序博客网 时间:2024/06/13 09:28

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.
    **

解题思路:

**
- 分别建立map和mapStr两个哈希表;
- map用于存储 pattern中不同字符对应的index;
- mapStr用于存储str中不同字符串对应的index,注意将str字符串存储与字符串数组strArr[]中;
- 依次遍历字符串pattern的i位置时,向map哈希表中加入key元素的同时比较对应位置的strArr[i]中字符串是否存在于mapStr哈希表中;并且mapStr[key]前一个位置处的index要与map[key]前一位置处的index相同;

  • 具体实现如下

    var wordPattern = function(pattern, str) {
    if((!pattern.length&&str.length)||(pattern.length&&!str.length))//任何一个字符串为空,另一个不为空,都应该返回false
    {
    return false;
    }
    var map = {},
    mapStr = {},
    symbol,
    len = pattern.length;
    var strArr = str.split(” “);//将str字符串转换为字符数组
    if(strArr.length !== len )
    {
    return false;
    }
    //建立哈希表 格式{b:[0,3],a[1,2]}
    for(var i = 0; i < len; i++)
    {
    symbol = pattern.substr(i,1); //依次取出pattern中的元素symbol
    var strEle = strArr[i];//取出字符数组中对应下标元素

    if(map[symbol])  //字符已存在哈希表中{    if(mapStr[strEle])   //对应查找mapStr数组中的strEle元素是存在    {        var strIndexArr = mapStr[strEle];  //查找mapStr哈希表中strEle元素的下标数组        if((strIndexArr.length-1) !== (map[symbol].length-1))//比较mapStr[strEle]与map[symbol两个下标数组是否相同        {            return false;        }        mapStr[strEle].push(i);        map[symbol].push(i); //在哈希表中存储字符对应的下标    }else{        return false;    }}else{    map[symbol] = [];    map[symbol].push(i);    if(!mapStr[strEle])    {        mapStr[strEle] = [];        mapStr[strEle].push(i);    }else{        return false;    }}

    }

    // for(var j=0,lenArr=strArr.length;j

这里写代码片
0 0
原创粉丝点击