当前位置: 面试刷题>> 单词长度最大积 (经典算法题500道)


题目描述补充

题目:单词长度最大积

给定一个字符串 s,其中包含了由空格分隔的多个单词。请编写一个算法来找到这些单词中任意两个单词长度乘积的最大值。注意,这里不考虑单词的重复组合。

示例

输入: "abc def ghi jkl"

输出: 16

解释: 单词长度为 [3, 3, 3, 3]。最大乘积为 3 * 4 = 12(但单词不重复组合,所以实际上我们考虑的是相邻最大长度的两个单词的乘积,即 3 * 3 = 9 并不是最大,而 "def" 和 "ghi" 的长度乘积 3 * 3 = 9 也不是,但这里为简化问题,我们可以直接取任意两个单词长度乘积的最大值,不考虑实际位置限制,即 3 * 4 = 12 是不可能的,应为 3 * 3 = 9,但这里为了说明思路,我们假设可以找到或理解为在所有可能组合中的最大值,实际上实现时应为找到最长两个单词的长度并相乘)。但更严谨的处理是,我们应该找到最长和次长单词的乘积,即 3 * 3 = 9,因为在这个例子中,没有两个单词长度和为4的。

解题思路

  1. 将字符串按空格分割成单词数组。
  2. 遍历单词数组,记录最长和次长的单词长度。
  3. 返回最长和次长单词长度的乘积。

PHP 代码示例

function maxProductOfWordLengths($s) {
    $words = explode(" ", $s);
    $maxLen = 0;
    $secondMaxLen = 0;
    
    foreach ($words as $word) {
        $len = strlen($word);
        if ($len > $maxLen) {
            $secondMaxLen = $maxLen;
            $maxLen = $len;
        } elseif ($len > $secondMaxLen) {
            $secondMaxLen = $len;
        }
    }
    
    return $maxLen * $secondMaxLen;
}

// 示例用法
echo maxProductOfWordLengths("abc def ghi jkl"); // 输出 9

Python 代码示例

def maxProductOfWordLengths(s):
    words = s.split()
    max_len, second_max_len = 0, 0
    
    for word in words:
        length = len(word)
        if length > max_len:
            second_max_len, max_len = max_len, length
        elif length > second_max_len:
            second_max_len = length
    
    return max_len * second_max_len

# 示例用法
print(maxProductOfWordLengths("abc def ghi jkl"))  # 输出 9

JavaScript 代码示例

function maxProductOfWordLengths(s) {
    const words = s.split(' ');
    let maxLen = 0;
    let secondMaxLen = 0;
    
    for (let word of words) {
        const len = word.length;
        if (len > maxLen) {
            [secondMaxLen, maxLen] = [maxLen, len];
        } else if (len > secondMaxLen) {
            secondMaxLen = len;
        }
    }
    
    return maxLen * secondMaxLen;
}

// 示例用法
console.log(maxProductOfWordLengths("abc def ghi jkl")); // 输出 9

码小课网站中有更多相关内容分享给大家学习,欢迎访问码小课网站深入学习更多编程知识及面试技巧。

推荐面试题