华为od机试题:无重复字符的元素长度乘积的最大值
时间: 2023-10-23 13:02:49 浏览: 53
题目要求找出一个字符串中没有重复字符的所有子串中,元素长度乘积的最大值。我们可以通过遍历字符串的每个字符来解决这个问题。
首先,定义两个指针start和end,它们分别指向当前子串的起始位置和结束位置。使用一个HashSet来存储当前子串中出现过的字符。
然后,我们开始遍历字符串。遍历过程中,如果当前字符在HashSet中不存在,就将其加入HashSet,并更新end指针;如果当前字符在HashSet中已经存在,就将start指针移动到重复字符的下一个位置,并将HashSet中所有字符移除,从而开始新的子串。
在遍历过程中,记录每个子串的长度和乘积。若当前子串的长度乘积大于当前最大值,就更新最大值。
最后,返回最大值即可。
下面是代码实现:
```python
def maxProduct(s):
max_product = 0
start = 0
end = 0
n = len(s)
substring = set()
while end < n:
if s[end] not in substring:
substring.add(s[end])
end += 1
max_product = max(max_product, end - start)
else:
substring.remove(s[start])
start += 1
return max_product
```
这样,我们就得到了最大的元素长度乘积。