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 包含了由單個空格分隔的小寫字母。
此題目難度easy,但是很有特色,是考察hash思想的乙個典型例子。
怎麼去解決問題呢?我們可以通過建立一種中間對映的關係來對兩個字串進行匹配
在本題中,我們可以將pattern中的字元按照他第一次出現的位置,對映為其第一次出現位置的索引,也就是
abba->0110
與此同時,將str按照同類規則對映
dog cat cat fish->0110
這時候只需要比較一下他們中間對映的值是否相同即可
不過在我們進行第二次對映的時候,由於我們已經有了第一次對映的值,我們就不需要再開個陣列存第二個映**,我們直接比對應位的值即可。
//優化後的,擊敗98%
public
boolean
wordpattern
(string pattern, string str)
int[
] ccp=
newint
[pattern.
length()
];for(
int i=
0;i) ccp[i]
=cmap.
get(cp[i]);
} map
smap=
newhashmap
<
>()
;//記錄元素出現的第乙個位置
for(
int i=
0;i(ccp[i]
!=smap.
get(cs[i]))
}return
true;}
//未優化的,擊敗8%
public
boolean
wordpattern
(string pattern, string str)
sb1.
(cmap.
get(cp[i]))
;}string[
] cs=str.
split
(" ");
mapsmap=
newhashmap
<
>()
;//記錄元素出現的第乙個位置
stringbuilder sb2=
newstringbuilder()
;for
(int i=
0;i) sb2.
(smap.
get(cs[i]))
;}if(sb1.
tostring()
.equals
(sb2.
tostring()
))return
false
;}
演算法 Hash 單詞規律
給定一種規律 pattern 和乙個字串 str 判斷 str 是否遵循相同的規律。這裡的 遵循 指完全匹配,例如,pattern 裡的每個字母和字串 str 中的每個非空單詞之間存在著雙向連線的對應規律。示例1 輸入 pattern abba str dog cat cat dog 輸出 true...
Leetcode 單詞規律
63.單詞規律 題目內容 及思路 include include include includeusing namespace std class solution if i str.size 1 對於最後乙個字串 如果個數不一樣,肯定不匹配 if pattern.size str1.size re...
290 單詞規律
給定一種規律 pattern 和乙個字串 str 判斷 str 是否遵循相同的規律。這裡的 遵循 指完全匹配,例如,pattern 裡的每個字母和字串 str 中的每個非空單詞之間存在著雙向連線的對應規律。示例1 輸入 pattern abba str dog cat cat dog 輸出 true...