1. 程式人生 > 實用技巧 >單詞規律

單詞規律

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

classSolution{ public: boolwordPattern(stringpattern,stringstr){ vector<string>vtr; intt=-1; for(inti=1;i<str.size();i++){//將str中的字元塊儲存到vtr中,方便使用索引 if(str[i]==''){ t=t+1; vtr.push_back(str.substr(t,i-t)); t=i; } } vtr.push_back(str.substr(t+1,str.size()-1));//因為最後一個字元塊後面沒有空格符,所以最後單獨加這一步 intn=pattern.size(),m=vtr.size(); if(n!=m)returnfalse;//兩個對應大小不等,直接返回false map<char,int>map1;//記錄pattern的關係 map<string,int>map2;//記錄str(vtr)的關係 for(inti=0;i<n;i++)if(!map1[pattern[i]])map1[pattern[i]]=i+1;//如果map1裡面沒有這個key,這將這個key與其索引值+1加入map1中 for(inti=0;i<m;i++)if(!map2[vtr[i]])map2[vtr[i]]=i+1;//同理維護map2 for(inti=0;i<n;i++)if(map1[pattern[i]]!=map2[vtr[i]])returnfalse;//比較若key的對應值不相等,則說明不一一對映,返回false returntrue;//所有的都滿足,返回true } };