給定一種規(guī)律 pattern 和一個(gè)字符串 str ,判斷 str 是否遵循相同的規(guī)律壹士。
這里的 遵循 指完全匹配筑公,例如颓鲜, pattern 里的每個(gè)字母和字符串 str 中的每個(gè)非空單詞之間存在著雙向連接的對(duì)應(yīng)規(guī)律一铅。
示例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
說(shuō)明:
你可以假設(shè) pattern 只包含小寫(xiě)字母陕贮, str 包含了由單個(gè)空格分隔的小寫(xiě)字母。
本題其實(shí)不算什么難題馅闽,我也沒(méi)用用什么巧妙的辦法飘蚯,就是建立兩個(gè)哈希表馍迄,每次遍歷到一個(gè)單詞和一個(gè)字母福也,就建立雙方的映射關(guān)系,當(dāng)遍歷到已經(jīng)存在映射關(guān)系但是不相等的時(shí)候就是false攀圈,此外本題要注意暴凑,字母可能比字符串少,或者字符串比字母少赘来,需要做額外判斷现喳。
代碼如下:
class Solution {
public boolean wordPattern(String pattern, String str) {
HashMap <Character,String> map1 = new HashMap<>();
HashMap <String,Character> map2 = new HashMap<>();
int j = 0;
for (int i = 0; i < pattern.length(); i++){
char ch = pattern.charAt(i);
int temp = j;
while (j < str.length() && str.charAt(j) != ' ') j++;
if (temp == j) return false;
String s = str.substring(temp,j);
if (map1.containsKey(ch)){
if ( !s.equals(map1.get(ch))){
return false;
}
}
if (map2.containsKey(s)){
if ( ch != map2.get(s)){
return false;
}
}
map1.put(ch,s);
map2.put(s,ch);
j++;
}
if (j >= str.length())
return true;
else
return false;
}
}
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/word-pattern
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有凯傲。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處嗦篱。