演算法 單詞規律

2021-10-23 06:29:16 字數 1932 閱讀 4616

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...