博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Longest Substring Without Repeating Characters (middle)
阅读量:4880 次
发布时间:2019-06-11

本文共 1673 字,大约阅读时间需要 5 分钟。

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

 

思路:

关键是记录当前子串的起始位置和用hash表记录每个字母出现的情况。

大神简约版的代码:

class Solution {public:    int v[256]; //asciib码最多256个    int lengthOfLongestSubstring(string s) {        memset(v,-1,sizeof(v)); //位置先全部赋值为-1        int start = 0, ans = 0;        for (int i = 0; i < s.size(); ++i) {            if (v[s[i]] >= start) { //如果当前子串中已经出现了该字符 更新答案和起始位置                ans = ans > i - start ? ans : i - start;                start = v[s[i]] + 1;            }            v[s[i]] = i;        }        ans = ans > s.size() - start ? ans : s.size() - start;        return ans;    }};

 

思路是一样的,我自己好长好慢的代码:

int lengthOfLongestSubstring(string s) {        unordered_map
v; int ans = 0; int len = 0; int start = 0; //记录当前子串的起始位置 for(int i = 0; i < s.size(); i++) { if(v.find(s[i]) == v.end()) { len++; v[s[i]] = i; } else { string tmp = s.substr(i - len, len); ans = (len > ans) ? len : ans; len = i - v[s[i]]; for(int j = start; j < v[s[i]]; j++) //把重复字符前面的字符次数都置0 { v.erase(s[j]); } start = v[s[i]] + 1; v[s[i]] = i; } } ans = (len > ans) ? len : ans; return ans; }

 

转载于:https://www.cnblogs.com/dplearning/p/4270121.html

你可能感兴趣的文章
不用代码就能实现get与post
查看>>
发现一个强大的可视化第三方库pyecharts
查看>>
团队项目第一阶段冲刺站立会议03
查看>>
Android Material Design控件学习(二)——NavigationView的学习和使用
查看>>
ActiveMQ介绍
查看>>
FineUI(专业版)新增 5 款 Metro 皮肤,邀您共赏!
查看>>
Java生鲜电商平台-订单表的设计
查看>>
gdb基本调试命令
查看>>
互联网开放平台API安全设计
查看>>
python Django 相关学习笔记
查看>>
扯蛋css
查看>>
[洛谷P4149][IOI2011]Race
查看>>
关于多线程编程的一点思考
查看>>
复利计算--web版--总结--软件工程
查看>>
OPMN
查看>>
hdu 1999 不可摸数
查看>>
抽象类与接口比较
查看>>
.Net小白的大学四年,内含面经
查看>>
幂的求和取模
查看>>
利用 Project Lombok 自定义 AST 转换
查看>>