【LeetCode 290】單詞規律

Problem Description

題目鏈接

給定一種規律 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

思路

使用map映射,將每個單詞與對應字母的映射關係保存起來,然後判斷後面的單詞與字母是否跟映射的保持一致,不一致則說明不匹配。

代碼

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        if(!pattern.length() || !str.length()){
            return false;
        }
        map<string,char> m;//保存單詞與字母的映射關係
        int flag[26] = {0};
        string word = "";
        str += " ";
        int index = 0;
        for(int i = 0; i < str.length(); i++){
            if(str[i] == ' '){
                if(m.find(word) == m.end()){  //字符串中的單詞沒有出現過,那麼就看pattern中對應的字母是否被用過
                    if(flag[pattern[index]-'a']){ //這個字母已經被用過了,則說明不匹配
                        return false;
                    }
                    m[word] = pattern[index];//沒有用過,則將單詞與字母進行map映射
                    flag[pattern[index]-'a'] = 1;//並將字母進行標記,表示已經用過
                }
                else{  //如果這個單詞已經在map中存過了,那麼就看pattern中對應的字母是否和map映射的相同
                    if(m[word] != pattern[index]){  //如果不相同的話,則說明不匹配
                        return false;
                    } 
                }
                word = "";
                index++;
            }
            else{
                word+=str[i];
            }
        }
        if(index != pattern.length()){  //如果下標和pattern的長度不對應,則說明pattern的字母數和str的單詞數不對應,即不匹配
            return false;
        }
        return true;
    }
};

 

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