当前位置: 面试刷题>> 模式识别 (经典算法题500道)


### 题目描述补充 **题目:模式识别 - 字符串中的子模式计数** 在给定的一个长字符串中,我们需要识别并计算一个特定子模式(子字符串)出现的次数。子模式可以是一个固定的字符串,也可以是遵循某种规则(如正则表达式)的字符串模式。要求实现一个函数,该函数接收两个参数:一个长字符串(`s`)和一个子模式(`pattern`),并返回子模式在长字符串中出现的次数(不重叠)。 ### 示例 **示例 1**: - 输入: `s = "abcabcabc"`, `pattern = "abc"` - 输出: `3` - 解释: `"abc"` 在 `"abcabcabc"` 中出现了三次。 **示例 2**: - 输入: `s = "abababab"`, `pattern = "abab"` - 输出: `2` - 解释: `"abab"` 在 `"abababab"` 中出现了两次,分别是 `"abababab"` 的前两个字符和后两个字符。 **示例 3(正则表达式)**: - 输入: `s = "123abc123def123"`, `pattern = "\\d+"`(正则表达式匹配一个或多个数字) - 输出: `2` - 解释: `"123"` 出现了两次,分别在 `"123abc123def123"` 的开始和中间部分。 ### PHP 示例代码 ```php function countPatternOccurrences($s, $pattern) { // 如果pattern是正则表达式 if (preg_match('/^\/.+\/$/', $pattern)) { // 去除正则表达式的斜杠 $pattern = trim($pattern, '/'); $count = preg_match_all("/$pattern/", $s, $matches); } else { $count = substr_count($s, $pattern); } return $count; } // 示例调用 echo countPatternOccurrences("abcabcabc", "abc"); // 输出: 3 echo countPatternOccurrences("abababab", "abab"); // 输出: 2 echo countPatternOccurrences("123abc123def123", "/\\d+/"); // 输出: 2 ``` ### Python 示例代码 ```python import re def count_pattern_occurrences(s, pattern): if pattern.startswith('/') and pattern.endswith('/'): # 处理正则表达式 pattern = pattern[1:-1] count = len(re.findall(pattern, s)) else: count = s.count(pattern) return count # 示例调用 print(count_pattern_occurrences("abcabcabc", "abc")) # 输出: 3 print(count_pattern_occurrences("abababab", "abab")) # 输出: 2 print(count_pattern_occurrences("123abc123def123", "/\\d+/")) # 输出: 2 ``` ### JavaScript 示例代码 ```javascript function countPatternOccurrences(s, pattern) { if (pattern.startsWith('/') && pattern.endsWith('/')) { // 处理正则表达式 const regex = new RegExp(pattern.slice(1, -1), 'g'); const matches = s.match(regex) || []; return matches.length; } else { return (s.match(new RegExp(pattern, 'g')) || []).length; } } // 示例调用 console.log(countPatternOccurrences("abcabcabc", "abc")); // 输出: 3 console.log(countPatternOccurrences("abababab", "abab")); // 输出: 2 console.log(countPatternOccurrences("123abc123def123", "/\\d+/")); // 注意:JavaScript中不直接支持正则表达式的这种写法,需要调整输入 // 对于正则表达式,直接传入不含斜杠的字符串即可 console.log(countPatternOccurrences("123abc123def123", "\\d+")); // 输出: 2 ``` **码小课网站中有更多相关内容分享给大家学习**,包括但不限于算法详解、面试技巧、实战项目等,帮助大家提升编程能力和职业素养。
推荐面试题