LeetCode 290. 单词模式(C++、python)

给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。

这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

示例1:

输入: pattern = "abba", str = "dog cat cat dog"
输出: true

示例 2:

输入:pattern = "abba", str = "dog cat cat fish"
输出: false

示例 3:

输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false

示例 4:

输入: pattern = "abba", str = "dog dog dog dog"
输出: false

说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。    

C++

class Solution {
public:
    bool wordPattern(string pattern, string str) 
    {
        map<char,string> dic;
        set<string> st;
        int n=str.length();
        vector<int> ss;
        vector<string> temp;
        string aa;
        int count=1;
        for(int i=1;i<n-1;i++)
        {
            if(str[i]==' ')
            {
                count++;
                ss.push_back(i);
            }
        }
        int m=pattern.length();
        if(m!=count)
        {
            return false;
        }
        if(count==1)
        {
            return true;
        }
        aa=str.substr(0,ss[0]);
        temp.push_back(aa);      
        for(int i=1;i<ss.size();i++)
        {
            aa=str.substr(ss[i-1]+1,ss[i]-ss[i-1]-1);
            temp.push_back(aa);
        }
        aa=str.substr(ss[ss.size()-1]+1,n-ss[ss.size()-1]);
        temp.push_back(aa);
        for(int i=0;i<m;i++)
        {
            if(dic.count(pattern[i])<1)
            {
                dic.insert(pair<char,string>(pattern[i],temp[i]));
                st.insert(temp[i]);
            }
            else
            {
                if(dic[pattern[i]]!=temp[i])
                {
                    return false;
                }
            }           
        }
        return dic.size()==st.size();
    }
};

python

class Solution:
    def wordPattern(self, pattern, str):
        """
        :type pattern: str
        :type str: str
        :rtype: bool
        """
        dic={}
        st=set()
        ss=[]    #存放空字符的下标
        temp=[]  #存放str中的单词
        count=1
        n=len(str)
        for i in range(1,n-1):
            if str[i]==' ':
                count += 1
                ss.append(i)
        m=len(pattern)
        if m!=count:
            return False
        if count==1:
            return True
        aa=str[0:ss[0]]
        temp.append(aa)
        con=len(ss)
        for i in range(1,con):
            aa=str[ss[i-1]+1:ss[i]]
            temp.append(aa)
        aa=str[ss[con-1]+1:]
        temp.append(aa)
        for i in range(0,m):
            if pattern[i] not in dic:
                dic[pattern[i]]=temp[i]
                st.add(temp[i])
            else:
                if dic[pattern[i]]!=temp[i]:
                    return False
        return len(dic)==len(st)

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/82957777
今日推荐