zoukankan      html  css  js  c++  java
  • 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:

    1. pattern = "abba", str = "dog cat cat dog" should return true.
    2. pattern = "abba", str = "dog cat cat fish" should return false.
    3. pattern = "aaaa", str = "dog cat cat dog" should return false.
    4. 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.

     

    要完成的函数:

    bool wordPattern(string pattern, string str) 

     

    说明:

    1、这道题目是之前char-char的升级版,现在是char-string。要求不变,仍然是不能两个相同的字母对应一个string,不能两个相同的string对应一个字母。仿照之前思路,很容易构造出代码。

    2、这道题目还要注意有可能pattern里面的字母个数和string里面的单词个数不匹配,边界条件处理一下就好了。

    代码如下:

        bool wordPattern(string pattern, string str) 
        {
            map<char,string>m1;
            map<string,char>m2;
            int j=0;
            string str1="";//存储str中切分出来的单词
            for(int i=0;i<pattern.size();i++)
            {
                str1="";
                if(j>str.size())//如果pattern的字母多于str中的单词
                    return false;
    
                while(str[j]!=' '&&str[j]!='')//碰到空格和str末尾的''就停下
                {
                    str1+=str[j];
                    j++;
                }
                j++;  //j设置为下一个单词首字母的index
     
                if(m1[pattern[i]]=="")
                m1[pattern[i]]=str1;
                else
                {
                    if(m1[pattern[i]]!=str1)
                       return false;
                }
    
                if(!m2[str1])
                m2[str1]=pattern[i];
                else
                {
                    if(m2[str1]!=pattern[i])
                        return false;
                }
            }
    if(j<str.size())//如果str中单词多于pattern中字母 return false; return true; }

    m1是用来防止“aa”和“dog cat”这种一个字母对应两个不同单词的情况。m2则是用来防止“ab”和“dog dog”这种两个字母对应同一个单词的情况。

    上述代码实测2ms,beats 100% of cpp submissions。

  • 相关阅读:
    【leetcode】416. Partition Equal Subset Sum
    【leetcode】893. Groups of Special-Equivalent Strings
    【leetcode】892. Surface Area of 3D Shapes
    【leetcode】883. Projection Area of 3D Shapes
    【leetcode】140. Word Break II
    【leetcode】126. Word Ladder II
    【leetcode】44. Wildcard Matching
    【leetcode】336. Palindrome Pairs
    【leetcode】354. Russian Doll Envelopes
    2017.12.22 英语面试手记
  • 原文地址:https://www.cnblogs.com/chenjx85/p/8847717.html
Copyright © 2011-2022 走看看