你有兩個字串,即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...