zoukankan      html  css  js  c++  java
  • LeetCode3_无重复字符的最长子串(数组&字符串问题)

    题目:

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

    示例 1:

    输入: "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

    思路:

    滑动窗口方法实现;用数组代替集合来记录子串是否存在不重复字符;

    代码实现C++:

     1 class Solution {
     2 public:
     3     int lengthOfLongestSubstring(string s) {
     4         int freq[256] = {0}; //用于存储字符的出现的频率,类似于set的效果,判断是否含有重复字符。
     5         int l = 0, r = -1; //滑动窗口[l...r]
     6         int res = 0;       //最长不重复字符串的长度
     7         
     8         while(l<s.size())
     9         {
    10             //首先保证下一个要考察的字符不越界,且下一个考察的字符之前不重复
    11             if(r+1<s.size() && freq[s[r+1]] == 0)
    12             {
    13                 r++; //窗口右边界右移一位
    14                 freq[s[r]]++; //维护freq数组
    15             }
    16             else  //下一个考察的字符是重复的
    17             {
    18                 freq[s[l]]--; //维护freq数组
    19                 l++;          //窗口左边界右移一位
    20             }
    21             //在该轮循环中,窗口完成了移动
    22             res = max(res,r-l+1); //更新res
    23         }
    24         return res;
    25     }
    26 };
  • 相关阅读:
    用jQuery写的一个简单的弹出窗口(IE7\IE8\FF3)
    live write test
    sql2
    查询所有表索引
    java初学问题记录(2012.02.092012.02.16)
    SQL
    centso7网卡bond
    vmware模板
    Dockerfile参考
    Docker简单介绍
  • 原文地址:https://www.cnblogs.com/grooovvve/p/11818149.html
Copyright © 2011-2022 走看看