当前位置: 面试刷题>> 循环单词 (经典算法题500道)


题目描述补充

题目:循环单词检测

给定一个字符串s,我们需要编写一个函数来判断该字符串是否是一个循环单词。一个字符串是循环单词,如果它可以通过将字符串重新排列形成一个新的字符串,使得这个新字符串可以由原字符串的某个非空子串多次拼接得到。换句话说,存在一个子串sub,使得sub + sub + ... + sub = ssub被重复拼接了若干次以形成s),并且sub的长度小于或等于s的长度。

示例

  • 输入:"abcabc"

  • 输出:true(因为"abc"重复两次得到"abcabc")

  • 输入:"abcdabcd"

  • 输出:true(因为"abcd"重复两次得到"abcdabcd")

  • 输入:"ababcd"

  • 输出:false(无法找到一个子串重复拼接后得到原字符串)

PHP 示例代码

function isCircularWord($s) {
    $len = strlen($s);
    // 排序字符串,以便比较
    $sorted = str_split(str_replace(' ', '', $s));
    sort($sorted);
    $sortedStr = implode('', $sorted);

    // 检查所有可能的子串长度
    for ($i = 1; $i <= $len / 2; $i++) {
        if ($len % $i == 0) {
            $sub = substr($sortedStr, 0, $i);
            $repeated = str_repeat($sub, $len / $i);
            if ($repeated == $sortedStr) {
                return true;
            }
        }
    }
    return false;
}

// 测试
echo isCircularWord("abcabc") ? "true" : "false"; // true
echo "\n";
echo isCircularWord("abcdabcd") ? "true" : "false"; // true
echo "\n";
echo isCircularWord("ababcd") ? "true" : "false"; // false

Python 示例代码

def is_circular_word(s):
    s = ''.join(sorted(s))  # 排序字符串
    n = len(s)
    
    # 检查所有可能的子串长度
    for i in range(1, n // 2 + 1):
        if n % i == 0:
            sub = s[:i]
            repeated = sub * (n // i)
            if repeated == s:
                return True
    return False

# 测试
print(is_circular_word("abcabc"))  # True
print(is_circular_word("abcdabcd"))  # True
print(is_circular_word("ababcd"))  # False

JavaScript 示例代码

function isCircularWord(s) {
    let sortedStr = s.split('').sort().join(''); // 排序字符串
    let len = sortedStr.length;

    // 检查所有可能的子串长度
    for (let i = 1; i <= len / 2; i++) {
        if (len % i === 0) {
            let sub = sortedStr.substring(0, i);
            let repeated = sub.repeat(len / i);
            if (repeated === sortedStr) {
                return true;
            }
        }
    }
    return false;
}

// 测试
console.log(isCircularWord("abcabc")); // true
console.log(isCircularWord("abcdabcd")); // true
console.log(isCircularWord("ababcd")); // false

// 码小课网站中有更多相关内容分享给大家学习

这些示例代码展示了如何在不同的编程语言中解决循环单词检测的问题。

推荐面试题