290. 单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
思路
- 思路挺简单的,主要是细节问题,字母和字符串需要一一对应,所以需要一个哈希表和一个数组,哈希表映射字符串到字母,数组映射字母到字符串。然后就可以遍历pattern的每个字母,分割字符串即可。
代码
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<string, char> m;
vector<string> index(26, "");
int i = 0;
int len = s.size();
for(const auto& c : pattern) {
if(i >= len) {
return false;
}
int j = i;
while(j < len && s[j] != ' ') {
j++;
}
string tmp = s.substr(i, j - i);
if(m.count(tmp) && m[tmp] != c) {
return false;
}
if(index[c - 'a'] != "" && index[c - 'a'] != tmp) {
return false;
}
index[c - 'a'] = tmp;
m[tmp] = c;
i = j + 1;
}
return i >= len;
}
};