题目:

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.

解题思路:

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

方法一:

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

//方法一:string only
int lengthOfLongestSubstring(string s)
{size_t j = 1;if (s.size() <= 1)return s.size();int len = 1, nMaxLen = 0;string subStr;subStr.push_back(s[0]);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(0,1);len --;}subStr.push_back(s[j]);}len ++;j ++;}if (len > nMaxLen)nMaxLen = len;return nMaxLen;
}

方法二:

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

 1 //方法二:pointer
 2 int lengthOfLongestSubstring2(string s) {
 3     int maxlen = 0, left = 0;
 4     int sz = s.length();
 5     int prev[26];
 6     memset(prev, -1, sizeof(prev));
 7
 8     for (int i = 0; i < sz; i++) {
 9         if (prev[s[i]-'a'] >= left) {
10             left = prev[s[i]-'a'] + 1;
11         }
12         prev[s[i]-'a'] = i;
13         maxlen = max(maxlen, i - left + 1);
14     }
15     return maxlen;
16 }

方法三:

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

 1 //方法三:hash table
 2 int lengthOfLongestSubstring3(string s) {
 3     if(s.length()<2)
 4         return s.length();
 5     int max_len=0;
 6     map<char,int> sub; //hash map
 7     for(int i=0,j=0;i<s.length();++i){
 8         if(sub.find(s[i])!=sub.end()){
 9             j=max(j,sub[s[i]]+1);
10         }
11         sub[s[i]]=i;
12         max_len=max(max_len,i-j+1);
13     }
14     return max_len;
15 }

LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium...相关推荐

  1. leetcode 3. Longest Substring Without Repeating Characters | 3. 无重复字符的最长子串(双指针+滑窗)

    题目 https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题解 双指针+滑窗,维护一个 set, ...

  2. LeetCode 3_Longest Substring Without Repeating Characters

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

  3. java C++ 实现 leetcode 第三题 3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    一.C++实现 int lengthOfLongestSubstring(string s) {if (s.length() <= 1)return s.length();int res = 1 ...

  4. LeetCode刷题(37)~无重复字符的最长子串

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

  5. leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...

  6. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  7. LeetCode 每日一题 3. 无重复字符的最长子串

    LeetCode 每日一题 3. 无重复字符的最长子串   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创 ...

  8. 【LeetCode】无重复字符的最长子串【滑动窗口法】

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

  9. LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)

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

最新文章

  1. 8个步骤成功拖垮新业务线!
  2. 【Win8启动后自动进入传统桌面设置】
  3. android ListView详解
  4. JavaScript专题之从零实现jQuery的extend
  5. 5.18 上午 外教专业课 linux 听力
  6. 安卓 java 视频_安卓实战项目-动态桌面-rxjava实现搜索本地所有视频
  7. 小程序数据框有重影_小程序开发(二):数据绑定
  8. Solution Explorer 和 Source Control Explorer 的 View History 异同
  9. java和python哪个运行速度快_为什么Python代码的运行速度比较慢呢?这会影响Python语言的扩张吗?...
  10. 查看微信公众号文章发布时间
  11. VoLTE呼叫SIP信令分析
  12. HTML+CSS三栏式布局(7种)
  13. 超实用的容器镜像漏洞检测工具 Trivy 入门指南
  14. python -字典生成器
  15. 1817735-45-7,Carboxy-PEG2-sulfonic acid在EDC和HATU等活化剂存在下,末端羧酸可参与与伯胺的反应
  16. 胰蛋白酶的化学性质及应用
  17. 平衡二叉树——如何实现不平衡二叉树到平衡二叉树
  18. Feng's blog
  19. 大数据时代,香港成为IDC发展新战略区域
  20. 有关天线与波的极化方向的小结:线极化,圆极化,椭圆极化

热门文章

  1. 分布式缓存redis 方案_Redis缓存和MySQL数据一致性方案详解
  2. Oracle中sysdba身份和dba角色区别
  3. Python_第一堂课
  4. centos 7 忘记密码
  5. 【bzoj1086】 scoi2005—王室联邦
  6. POJ 1118 求平面上最多x点共线
  7. echarts与TmodJS的冲突 -- 模块化加载器之间的冲突
  8. 剑指 offer set 26 不用加减乘除做加法
  9. .Net Remoting(分离服务程序实现) - Part.3
  10. 计算机中的颜色XIII——颜色转换的快速计算公式