每日一题最长无重复子数组最长不含重复字符的子字符串
Posted SuchABigBug
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题最长无重复子数组最长不含重复字符的子字符串相关的知识,希望对你有一定的参考价值。
目录:
1. 最长不含重复字符的子字符串
题目1: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
class Solution
public:
int lengthOfLongestSubstring(string s)
int maxValue = 0;
int start = 0; //当前最长无重复字符的最长子串的开始位置
map<char, int> mp;
for(int i=0; i<s.size(); ++i)
char alpha = s[i];
//找到了重复的字符
if(mp.count(alpha))
start = max(start, mp[alpha]+1); //我们mp里的value要比start大就需要更新
maxValue = max(maxValue, i-start+1); //记得需要+1,始终有个字符
mp[alpha] = i; //记录当前key的 index,后续如果比start要大,我们就需要更新,重新开始子串的位置
return maxValue;
;
2. 最长无重复子数组
给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。
子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组
示例1
输入:
[2,3,4,5]
返回值:4
说明:[2,3,4,5]是最长子数组
示例2
输入:[2,2,3,4,3]
返回值:3
说明:[2,3,4]是最长子数组
示例3
输入:[9]
返回值:1
class Solution
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr)
int getmax = 0;
int i=0;
int j=0;
set<int> st;
while(j<arr.size())
//如果有这个值一直存在,那么我们将当前i 的 index删掉,i++
while(st.count(arr[j]))
st.erase(arr[i++]);
//否则,无重复将其插入
st.insert(arr[j++]);
getmax = max(getmax, j-i);
return getmax;
;
Question Link:
以上是关于每日一题最长无重复子数组最长不含重复字符的子字符串的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 面试必刷TOP101:最长无重复子数组
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段