题目描述
给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
示例1
输入
[2,3,4,5]
返回值
4
示例2
输入
[2,2,3,4,3]
返回值
3
备注:
1 \leq n \leq 10^51≤n≤105
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
vector<int> arr_length;
int current_start_index = 0;
int current_stop_index = 0;
int max_len = 0;
for(int i = 1; i < arr.size(); i++)
{
current_stop_index = i;
for(int j = current_start_index; j < i; j++)
{
if(arr[i] == arr[j])
{
current_start_index = j+1;
break;
}
}
arr_length.push_back(current_stop_index - current_start_index + 1);
}
for(int i = 0; i < arr_length.size(); i++)
{
if(arr_length[i] > max_len)
{
max_len = arr_length[i];
}
}
return max_len;
}
};
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
// write code here
// write code here
vector<int> arr_length;
int current_start_index = 0;
int current_stop_index = 0;
int max_len = 0;
int current_len = 0;
for(int i = 1; i < arr.size(); i++)
{
current_stop_index = i;
for(int j = current_start_index; j < i; j++)
{
if(arr[i] == arr[j])
{
current_start_index = j+1;
break;
}
}
current_len = current_stop_index - current_start_index + 1;
max_len = current_len > max_len ? current_len : max_len;
// if(current_len > max_len) max_len = current_len;
}
return max_len;
}
};
总结:
这个题目使用了动态规划的思想,寻找结束在第i处数据的最长字符串。不断调整。因为前面是不重复字符串。落在第i处的字符串只要判断有无和第i处数据相同的数据即可。