LeetCode 290——單詞規律

一、題目介紹

給定一種規律 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 包含了由單個空格分隔的小寫字母。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/word-pattern
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

二、解題思路

利用哈希映射map建立字母與字符串的對應關係,進而保證pattern 和一個字符串 str 的規律一致。即如果pattern中相同的字母,應該對應相同字符串,且相對位置也要保持一致。

三、解題代碼

class Solution {
public:
    vector<string> split(string str, string pos) //分割字符串
    {
        vector<string> res;
        while(!str.empty())
        {
            int n = str.find(pos);
            res.push_back(str.substr(0, n));
            str = n == -1 ? "" : str.substr(n+1);
        }
        return res;
    }
    bool wordPattern(string pattern, string str) {
        vector<string> vec = split(str, " ");
        //如果pattern中與str中的元素個數不同,則直接返回false
        int n = pattern.size();
        int m = vec.size();
        if(m != n)
            return false;
        map<char, string> mp;
        set<string> visit;
        for(int i = 0; i < n; ++i)
        {
            if(mp[pattern[i]] == "")   //當出現一個新的字母時需要對應一個新的字符串
            {
                if(visit.count(vec[i]) == 0)
                {
                    mp[pattern[i]] = vec[i];
                    visit.insert(vec[i]);
                }
                else
                    return false;
            }
            else
            {
                if(mp[pattern[i]] == vec[i])
                    continue;
                else
                    return false;
            }
        }
        return true;
    }
};

四、解題結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章