【LeetCode290】-单词规律

实现思路

利用map映射,将pattern中的字符映射到单词中,但实际上不仅要考虑这个映射,也要考虑单词映射到字符的情况,否则将无法识别:
“abba”
“dog dog dog dog”
这种情况;
除此之外,也要考虑,可能pattern中的字符个数和单词个数不匹配的问题
在这里插入图片描述
我的思路是单词映射到字符,字符映射到单词保证两者是一一对应的关系,而另一种思路是使用unsed标志数组来看字符是否在之前已经别的单词映射了来判断。

实现代码

class Solution {
    
    
public:
    bool wordPattern(string pattern, string s) {
    
    
        map<char,string> m;
        map<string,char> m2;
        int i=0,j=0;
        while(i<pattern.length()&&j<s.length()){
    
    
            string ss="";
            while(s[j]!=' '&&j<s.length()){
    
    
                ss+=s[j];
                j++;
            }
            while(s[j]==' '&&j<s.length()) j++;

            if(!m.count(pattern[i])&&!m2.count(ss)){
    
    
                m[pattern[i]]=ss;
                m2[ss]=pattern[i];
            }else{
    
    
                if(m[pattern[i]]!=ss) return false;
                if(m2[ss]!=pattern[i]) return false;
            }
            i++;
        }
        return i==pattern.length()&&j==s.length();
    }
};

在这里插入图片描述

这里面有一步骤,为了防止有多个空格进行分割的情况,我多设置了一小段代码,但在这题实际的测试用例中都是一个空格分割开的单词

提交结果及分析

在这里插入图片描述
时间复杂度O(n1+n2)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/115023645