zoukankan      html  css  js  c++  java
  • 3. 无重复字符的最长子串(O(N))

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

    示例:

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

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

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

    class Solution {
    public:
        int lengthOfLongestSubstring(string str) {
            int vis[130];//vis[i] 记录字符i最后一次出现的位置
            memset(vis, -1, sizeof vis);
            int n = (int)str.size();     
            int ans = 0;//最后结果
            int pre = -1;    //记录当前不重复子串的起始位置
            for (int i = 0; i < n; i ++) {
                // 比较当前字符最后一次出现的位置vis[str[i]]:
                //     如果大于pre(当前不重复子串的起始位置)那么子串的起始位置就要变成vis[str[i]] + 1了
                //     如果小于pre,那么就无关紧要了,这个子串可以加入到不重复子串中
                pre = pre > vis[str[i]] ? pre : vis[str[i]];
                int cnt = i - pre;
                ans = ans < cnt ? cnt : ans;
                vis[str[i]] = i;
            }
            return ans;
        }
    };
  • 相关阅读:
    wcf通道Channel
    固定位置右下角
    小闹钟(无样式)
    CSS小注意(初级)
    java少包汇总
    maven的pom.xml配置
    myeclipse 手动安装 lombok
    Could not synchronize database state with session
    (转)myeclipse插件—SVN分支与合并详解【图】
    Nginx的启动、停止与重启
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/8597713.html
Copyright © 2011-2022 走看看