当前位置: 面试刷题>> 单词长度最大积 (经典算法题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 代码示例
```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 代码示例
```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 代码示例
```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
```
**码小课网站中有更多相关内容分享给大家学习**,欢迎访问码小课网站深入学习更多编程知识及面试技巧。