题目:

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 . For "bbbbb" the longest substring is "b", with the length of .

解题思路:

  这个题让找一个字符串中具有不重复单词的最长子串的长度,如:ababc,子串为abc,长度为3。有这么几个方法:

方法一:

  依赖字符串本身的一些特有函数,进行相应操作来完成。我们可以维护一个子串,来保存最长的无重复的子串,并记录当前子串的长度,如果遇到重复的字符,则去掉子串中重复的字符,一次进行下去,最终就能找到最长无重复子串。如str = ababc, substr = a, ab, ba, ab, abc....类似这样的思路。如下代码:

//方法一:string only
int lengthOfLongestSubstring(string s)
{
size_t j = ;
if (s.size() <= )
return s.size(); int len = , nMaxLen = ;
string subStr;
subStr.push_back(s[]);
while (j < s.size()) {
if (subStr.find(s[j]) == string::npos) {
subStr.push_back(s[j]);
}
else {
if (len > nMaxLen)
nMaxLen = len;
while (subStr.find(s[j]) != string::npos) {
subStr.erase(,);
len --;
}
subStr.push_back(s[j]);
}
len ++;
j ++;
}
if (len > nMaxLen)
nMaxLen = len;
return nMaxLen;
}

方法二:

  指针法:用一个指针指向字符串的左边界,如果遇到重复的字符,就往后移动,同时用一个有26位的字符数组(因为总共就26个字符)来保存每一个字符最近一次出现的位置,以此来更新指针位置和字符位置之间的距离,就可以算出最长无重复字符的长度,如下代码所示:

 //方法二:pointer
int lengthOfLongestSubstring2(string s) {
int maxlen = , left = ;
int sz = s.length();
int prev[];
memset(prev, -, sizeof(prev)); for (int i = ; i < sz; i++) {
if (prev[s[i]-'a'] >= left) {
left = prev[s[i]-'a'] + ;
}
prev[s[i]-'a'] = i;
maxlen = max(maxlen, i - left + );
}
return maxlen;
}

方法三:

  hashtable法:该方法和方法二其实是同一个思路,只不过该方法我不用数组来存字符的位置,而是通过hashtable来存,进而提高效率。如下代码:

 //方法三:hash table
int lengthOfLongestSubstring3(string s) {
if(s.length()<)
return s.length();
int max_len=;
map<char,int> sub; //hash map
for(int i=,j=;i<s.length();++i){
if(sub.find(s[i])!=sub.end()){
j=max(j,sub[s[i]]+);
}
sub[s[i]]=i;
max_len=max(max_len,i-j+);
}
return max_len;
}

LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium的更多相关文章

  1. LeetCode 3_Longest Substring Without Repeating Characters

    LeetCode 3_Longest Substring Without Repeating Characters 题目描写叙述: Given a string, find the length of ...

  2. LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...

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

    这道题是LeetCode里的第3道题. 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: ...

  4. leetcode 3. Longest Substring Without Repeating Characters 无重复字符的最长子串

    一.题目大意 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 给定一个字符串 s ,请你找出其 ...

  5. [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  6. #leetcode刷题之路3-无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc" ...

  7. Leetcode——3. 无重复字符的最长子串

    难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ...

  8. LeetCode(3):无重复字符的最长子串

    Medium! 题目描述: 给定一个字符串,找出不含有重复字符的 最长子串 的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ...

  9. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

随机推荐

  1. [51单片机] TFT2.4彩屏2 [32*32文字显示]

    >_<:同理如果想显示其他形式的字体,就要建立相应的库啦,如这里还有一个gb3232的汉字库:GB3232.h // ------------------ 汉字字模的数据结构定义 ---- ...

  2. pasteimg浏览器中粘贴图片jQuery插件

    pasteimg是一款可以在浏览器中实现图片粘贴的jQuery插件,兼容Chrome.Firefox.IE11以及其他使用这些内核的浏览器,比如,国内著名的360浏览器. pasteimg可以识别浏览 ...

  3. hibernate 问题集

    1.Could not obtain transaction-synchronized Session for current thread 解决方法: 在web.xml中加入如下配置: <fi ...

  4. C++ 用于大型程序的工具

    <C++ Primer 4th>读书笔记 相对于小的程序员团队所能开发的系统需求而言,大规模编程对程序设计语言的要求更高.大规模应用程序往往具有下列特殊要求: 1. 更严格的正常运转时间以 ...

  5. iOS-常用的辅助工具软件

    1.Navicat Premium11.0.20破解版快速安装配置(附文件)   Navicat Premium是当下非常好用的数据库管理软件,但是价格非常昂贵,并且还有某些小bug,感觉3000+的 ...

  6. 优化TableView性能

    优化tableView性能(针对滑动时出现卡的现象) (2013-08-02 11:18:15) 转载▼ 标签: ios tableview it 分类: 技术文档 在iOS应用中,UITableVi ...

  7. GEF - 制作一个简单图形化编辑框架笔记1

    在首先来看看GEF是什么,GEF的全称是Graphical Editing Framework,图形化框架,可以利用此框架做图形化编.他的基本原理是采用MVC开发模式. 以下是一些例子 GEF里面包含 ...

  8. 在VC项目中附加包含目录

    1.VC2010项目中附加包含目录 上图项目中附加了两个文件夹,一个是上级目录下的CommonClass,一个是下级目录下的invengo. 使用这两个目录下的类时直接在include后面写头文件名即 ...

  9. php三种基础算法:冒泡,插入和快速排序法

    $array = array(2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 function sort_bulldle($array){ $num = count($array); ...

  10. 几种web数据渲染模板对比

    在web开发,实现视图.数据的分离,由前端工程师专门负责编写html页面,有php后台工程师写php接口返回json数字,那么中间如何将json数据绑定到html页面上有几种方法呢.基于这种需求大体上 ...