zoukankan      html  css  js  c++  java
  • 新增5 最长不含重复字符的子字符串

    请从字符串中找出一个最长不含重复字符的子字符串,计算该最长子字符串的长度。例如字符串“arabcacfr”中,最长不含重复字符的子字符串是“acfr”,长度为4。

    思路:cur当前最长,max全局最长;hash数组记录字符对应下标;遍历字符串,如果字符对应hash值小于0,说明字符未出现,cur直接+1即可;如果大于等于0出现了说明重复字符,那就需要判断,如果两次出现长度差d大于cur说明重复字符不在当前cur长的字符串中,无需在意,cur+1即可,如果d小等于cur,说明重复字符在当前cur长的字符串汇中,需要重新计算最长长度,找规律可得cur = d。注意更新max。

    int longestSubStringWithoutDuplication(const string &str)
    {
        if (str.size() == 0) {
            return 0;
        }
        //历史最长,当前最长
        int max = 0, cur = 0;
        vector hash(26, -1);
        //遍历每一个字符
        for (int i = 0; i < str.size(); i++) {
            int preidx = hash[str[i] - 'a'];
            //之前为存储过或者重复字符距离大于当前最长未重复距离,则cur++;
            if (preidx < 0 || i - preidx > cur) {
                cur++;
            }
            //存储过,且在重复
            else {
                cur = i - preidx; //(i-1) - preidx + 1;
            }
            //存储字符对应的下标索引
            hash[str[i] - 'a'] = i;
    
            if (cur > max) {
                max = cur;
            }
        }
        return max;
    }
  • 相关阅读:
    安装node.js webkit环境[一]
    wpf 窗口最小化后,触发某事件弹出最小化窗口并置顶
    c# 旋转图片 无GDI+一般性错误
    类库里面添加日志记录 log4net
    string转xml
    DES c#加密后java解密
    使用排序字典排序
    怎么让一段xml被识别为字符串
    新装iis 页面503错误 DefaultAppPool停止解决方案
    hession
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8613537.html
Copyright © 2011-2022 走看看