• LeetCode 3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)


    题目描述

    给定一个字符串,找出不含有重复字符的最长子串的长度。

    示例:

    给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

    给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

    给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串"pwke" 是 子序列  而不是子串。

    解题思路

    采用双指针的思想,维护两个指针i、j,i为无重复子串的右端点,j为无重复子串的左端点,这样此子串的长度为i-j+1.再用哈希的思想维护一个大小为128的数组,其下标代表ASCII码共128个字符,下标对应的值记录当前字符最后一次出现位置的后一个位置。这样做的目的是在子串中遇到重复的字符时,下一个无重复子串一定不包含左边的重复字符,所以直接从左边重复字符的后一个位置继续寻找。令哈希数组初始全为0,这样i每次向后走一步,

    • 若i指向的字符在j~i-1的字符串中出现,即哈希数组中当前字符下标对应位置大于j,则j指向左边重复字符的后一个位置,否则j不动
    • 接着计算当前无重复子串的长度并更新最大长度
    • 最后修改哈希数组,使当前字符下标对应值为当前位置+1

    代码

     1 class Solution {
     2 public:
     3     int lengthOfLongestSubstring(string s) {
     4         int idx[128] = {0};
     5         int maxLen = 0;
     6         for(int i = 0, j = 0; i < s.size(); i++){
     7             j = max(idx[s[i]], j);
     8             maxLen = max(i-j+1, maxLen);
     9             idx[s[i]] = i+1;
    10         }
    11         return maxLen;
    12     }
    13 };
  • 相关阅读:
    ORACLE(系统表emp) 基本与深入学习
    jQuery框架 的四个入口函数
    函数
    sql1999语法
    左连接,右连接
    Oracle单行函数用法
    Kettle
    order by 排序
    sql*plus
    sql基本语句
  • 原文地址:https://www.cnblogs.com/wmx24/p/9141928.html
Copyright © 2020-2023  润新知