JAVA程序设计:模式匹配(LeetCode:面试题 16.18)

你有两个字符串,即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="",反之也符合规则
提示:

0 <= len(pattern) <= 1000
0 <= len(value) <= 1000
你可以假设pattern只包含字母"a"和"b",value仅包含小写字母。

思路:题目并不难,一些边界条件注意下就可以了,大致思路:首先枚举a所对应的字符串,在已知a对应字符串的前提下我们可以确定b所对应字符串的长度,基于这两个条件我们可以通过遍历value串判定当前状态是否能够匹配。

坑点:

1.在能够匹配时需要判断a和b对应的字符串是否相等。

2.当pattern为空串时,value串必须为空串,否则一定是false。

3.当value串为空串时,pattern串要么是空串,要么只有'a'或者只有'b'。

4.匹配存在对称关系,例如'abba’串不能与value匹配时,我们还需判断'baab'是否与value串匹配,如果匹配,则应返回true。

class Solution {
    public boolean patternMatching(String pattern, String value) {
    	
    	int n=pattern.length();
    	int m=value.length();
    	int num_a=0,num_b=0;
    	
    	for(int i=0;i

 

你可能感兴趣的:(JAVA程序设计:模式匹配(LeetCode:面试题 16.18))