面試題 16 18 模式匹配(解方程)

2021-10-07 09:50:59 字數 2457 閱讀 4487

你有兩個字串,即pattern和value。

pattern字串由字母"a"和"b"組成,用於描述字串中的模式。例如,字串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",「go"是"b」),該字串也匹配像"a"、"ab"和"b"這樣的模式。

但需注意"a"和"b"不能同時表示相同的字串。編寫乙個方法判斷value字串是否匹配pattern字串。

示例 1:

輸入: pattern = "abba", value = "dogcatcatdog"

輸出: true

示例 2:

輸入: pattern = "abba", value = "dogcatcatfish"

輸出: false

示例 3:

輸入: pattern = "aaaa", value = "dogcatcatdog"

輸出: false

示例 4:

輸入: pattern = "abba", value = "dogdogdogdog"

輸出: true

解釋: "a"="dogdog",b="",反之也符合規則

主方法裡就是遍歷數字解方程,

x*counta+y*countb = valuelen

找到可行解後就可以根據解來判斷是否能匹配。

當然,在解方程之前先把特殊情況解決掉,比如字串為空、a或者b代表空字串的情況。排除掉這幾種特殊情況後,解方程裡a和b的數量肯定是都超過1了。

思路全在注釋裡了。

class

solution

return

true;}

;//模式串為空,無法匹配。

if(plen ==0)

return

false

;//計算a和b的數量

int counta =0;

int countb =0;

for(

char c:pattern.

tochararray()

)//判斷a或者b為0的情況

if(counta ==0)

if(countb ==0)

//先測試能否單獨被a或者b分割if(

check

(value, counta)

||check

(value, countb)

)return

true

;//現在不能被單個字元分割

//x是a代表的字串的長度,y是b代表的字串的長度

int x =

0, y =0;

//x*counta+y*countb = vlen

for(y =

1; y//沒有可行解,返回匹配失敗。

return

false;}

public

boolean

check

(string value,

int a)

return

true;}

public

boolean

check

(string value, string pattern,

int a,

int b,

int x,

int y)

//計算a和b的起點。

int astart = lista.

get(0)

*y;int bstart = listb.

get(0)

*x;//取出a和b分別代表的子串。

string suba = value.

substring

(astart,astart+x)

; string subb = value.

substring

(bstart,bstart+y)

;//a和b如果相同,匹配失敗。

if(suba.

equals

(subb)

)return

false

;//開始匹配a

//判斷後面的子串是不是和起始子串一樣

for(

int i =

1; isize()

; i++

)else

}//判斷b,和a同理,不再寫注釋。

for(

int i =

1; isize()

; i++

)else

}//此解匹配成功。

return

true;}

}

面試題 16 18 模式匹配

你有兩個字串,即pattern和value。pattern字串由字母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模式。但需注意 a 和 b 不能同時表示相同的字串。...

16 面試題 16 18 模式匹配

難度 中等 面試題 16.18.模式匹配 你有兩個字串,即pattern和value。pattern字串由字 母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模 式。...

LeetCode面試題 16 18 模式匹配

同步儲存一下。這還叫中等難度?再次照題解 分類討論 1.pattern為空,則只有value為空時為true,否則false 2.當value為空時,如果pattern中既有a也有b則為false,否則為true 3.當二者都不為空,如果pattern只有a或者只有b,如果value能整除patte...