当前位置: 面试刷题>> 重复字符串匹配 (经典算法题500道)


题目描述补充

题目:重复字符串匹配

给定两个字符串 sp,你的任务是检查是否可以通过将字符串 p 中的字符进行任意次数的重复,使得字符串 p 成为字符串 s 的子串。如果可以实现,则返回 true;否则,返回 false

示例 1:

输入: s = "abab", p = "ab"
输出: true
解释: 可以通过重复 "ab" 来得到 "abab"。

示例 2:

输入: s = "abab", p = "abab"
输出: true
解释: 字符串 "abab" 已经与自身相同,因此无需重复。

示例 3:

输入: s = "leetcode", p = "etc"
输出: false
解释: 无论如何重复 "etc",都无法在 "leetcode" 中找到它作为子串。

PHP 示例代码

function repeatedStringMatch($s, $p) {
    $lenS = strlen($s);
    $lenP = strlen($p);
    
    $repeated = '';
    while (strlen($repeated) < $lenS + $lenP) { // 确保重复长度至少能覆盖s和p的长度和
        $repeated .= $p;
        if (strpos($repeated, $s) !== false) {
            return true;
        }
    }
    
    return false;
}

// 测试示例
echo repeatedStringMatch("abab", "ab") ? "true" : "false";  // 输出 true
echo repeatedStringMatch("abab", "abab") ? "true" : "false";  // 输出 true
echo repeatedStringMatch("leetcode", "etc") ? "true" : "false";  // 输出 false

Python 示例代码

def repeatedStringMatch(s: str, p: str) -> bool:
    repeated = ''
    while len(repeated) < len(s) + len(p):
        repeated += p
        if p in repeated:
            return True
    return False

# 测试示例
print(repeatedStringMatch("abab", "ab"))  # 输出 True
print(repeatedStringMatch("abab", "abab"))  # 输出 True
print(repeatedStringMatch("leetcode", "etc"))  # 输出 False

JavaScript 示例代码

function repeatedStringMatch(s, p) {
    let repeated = '';
    while (repeated.length < s.length + p.length) {
        repeated += p;
        if (repeated.includes(s)) {
            return true;
        }
    }
    return false;
}

// 测试示例
console.log(repeatedStringMatch("abab", "ab"));  // 输出 true
console.log(repeatedStringMatch("abab", "abab"));  // 输出 true
console.log(repeatedStringMatch("leetcode", "etc"));  // 输出 false

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法基础、数据结构、编程语言进阶等,欢迎访问码小课网站深入学习。

推荐面试题