题解 | #找到字符串的最长无重复字符子串#

找到字符串的最长无重复字符子串

http://www.nowcoder.com/practice/fafbd351003a499f9a80c3f641295f2a

//时间复杂度不是O(N)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int max=1;//最终的返回结果
    map<int, int> hashMap;//key的含义为数组的值,value的含义为这个值最近一次出现在数组中的下标
    int *arr=new int[n];
    int len=0;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
        if(hashMap.find(arr[i])==hashMap.end()){//说明之前没有这个数,也就是不会重复
            len++;
            max=len>max?len:max;
            hashMap[arr[i]]=i;
        }
        else{//说明之前已经有过arr[i]了,重复了
            len=i-hashMap[arr[i]];
            int j=hashMap[arr[i]];//获取上次出现的下标
            hashMap.clear();//清空哈希表
            for(j=j+1;j<=i;j++)
                hashMap[arr[j]]=j;
        }
    }
    cout<<max<<endl;
    return 0;
}
全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务