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

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

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

相当于将所有子串都录入到unordered_map中,保存其中最大的长度
这里利用双指针,i将数据录入,如果遇到重复的,则将已录入的元素,到重复的元素为止,都从unordered_map中移除,再重新开始录入(重复的元素,其value值被更新)

class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        unordered_map<int, int> Mymap;
        int n = arr.size();
        int t = 0, j = 0;
        for (int i = 0; i < n; i++) {
            if (Mymap.count(arr[i])) {//遇到重复的
                while (arr[j] != arr[i] && j <= i) {
                    Mymap.erase(arr[j]);//移除重复的元素之前的已保存的元素
                    j++;
                }
                j++;//保证j与i之间的为无重复元素的子串。若不进行j++, 则数组arr中,i与j之间存在arr[j] == arr[i];
            }
            Mymap[arr[i]] = i;//保存数据进入Mymap且更改已出现的数据的value
            t = Mymap.size() > t ? Mymap.size() : t;//保存子串的最大长度
        }
        return t;
    }
};
全部评论

相关推荐

永不遗忘:才这么点算什么拉黑,我初筛连着挂几十次了,最后还是能进面
点赞 评论 收藏
分享
希望被捞的猫头鹰很理智:大概率待遇低怕硕士跑路
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务