这一题其实就是一道典型的backtrack的题目,每一个递归层的前进都伴随着一个指针在pattern上前进一格,然后另一个指针在str上前进n格(n = 1, 2, 3...到字符串结尾)。譬如pattern = "abab", str = "redblueredblue",第一个递归层往下走之后,对应pattern的指针只往前走一个,对应str的指针可以推进任意格造成任意的子字符串对应pattern第一个字符a。
每往下走一层,就分以下几种情况
1. 当前的pattern指针所对应的字母是否有对应的子字符串,有子字符串的话,你就知道str那边应该取多长的字符串与之匹配,如果配得上,就pattern指针往下走一格,str对应的指针往下走对应的格数,否则直接返回FALSE
2. 如果没有对应的子字符串,就按照上面的描述那样让当前的pattern指针指向的字符去匹配所有可能的子字符串并且往下走递归层。
思路并不复杂,可以得到代码如下:
public boolean wordPatternMatch(String pattern, String str) {
HashMap<Character, String> patternMap = new HashMap<>();
return _wordMatch(patternMap, new HashSet<>(), pattern, s