題目描述:
你有兩個字串,即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:
0 <= len(pattern) <= 1000
0 <= len(value) <= 1000
你可以假設pattern只包含字母"a"和"b",value僅包含小寫字母。
題目分析:這道題,我一開始真的一點思路都沒得,哭了哭了,太菜了,確定是medium難度的題嗎!總之,這是乙個比較複雜的模擬題,我們先從邊界情況開始考慮:
如果pattern為空,那麼只有value為空才能滿足匹配
如果value為空,此時pattern為空或者只有乙個字母(a/b)時,此時可以將這個字母設定為空,來達到匹配的目的
如果pattern與value都不為空,此時就是我們的正文了。
直接去列舉各自字串的話更複雜了,我們可以嘗試通過列舉字串(a/b)長度來簡化處理過程。由題目描述可知,除了字串本身還有個數來決定是否匹配,所以這兩個因素都要考慮到,而個數是確定的(直接對pattern計算即可),那麼只需要列舉長度就可以了。同時,確定了a長度之後,b的長度也就確定了。假設,確定了a的長度,同時計算出b的長度,接下來對value進行遍歷,對pattern匹配到a/b時,對value對應的字串進行判斷,value的字串部分怎麼控制呢?通過乙個指標來擷取即可。
只要不相等即為不匹配。所以,只要我們能找到乙個len(a,b)解即可。還有乙個點,a與b是不能相同的,這個也要進行判斷。這題真的細節挺多的,看**吧
class
solution
//對稱性,a/b都是相同的,以個數大的去計算,符合下面演算法的通用性
//交換
if(cntapattern =
newstring
(change);}
//邊界情況
if(value.
length()
==0)return cntb ==0;
if(pattern.
length()
==0)return
false
;//都不為空
for(
int lena =
0;lena*cnta<=value.
length()
;lena++
)else
} pos += lena;
}else
else
} pos += lenb;}}
//a,b代表的字串不能相同
if(isok&&
!(stra.
equals
(strb)))
return
true;}
}return
false;}
}
LeetCode面試題 16 18 模式匹配
同步儲存一下。這還叫中等難度?再次照題解 分類討論 1.pattern為空,則只有value為空時為true,否則false 2.當value為空時,如果pattern中既有a也有b則為false,否則為true 3.當二者都不為空,如果pattern只有a或者只有b,如果value能整除patte...
Leetcode 面試題 16 18 模式匹配
你有兩個字串,即pattern和value。pattern字串由字母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模式。但需注意 a 和 b 不能同時表示相同的字串。...
LeetCode面試題 16 18 模式匹配
你有兩個字串,即pattern和value。pattern字串由字母 a 和 b 組成,用於描述字串中的模式。例如,字串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 該字串也匹配像 a ab 和 b 這樣的模式。但需注意 a 和 b 不能同時表示相同的字串。...