最近在leetcode上刷题,无聊看到第三题,题干如下:

  Longest Substring Without Repeating Characters:

  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.

  思路实际上是十分巧妙的,我们事先建立一个数组,用来记录所有字符的出现位置,初试的时候因为我们计数肯定是从第一个字符开始,第一个字符的下标为0,那么我们就就将先将初试的时候各个字符出现的位置设置成-1,那么我们首先从第一个字符开始往后计数,每次发现一个字符就就这个字符出现的位置改成现在的位置,这个时候我们开始计数的位置还是0,一旦我们往后不断更新最大的不重复子字符串的长度的时候,第一个重复的字符出现了,那么这个时候我们就要更新开始的位置了,因为什么呢,因为我们的字符串里不能包含两个相同的字符,因此这个时候只有两种选择:一种是起点选在原来的起点,重点选在两个重复的字符之间,这种情况显然我们已经考虑过了,因此这个时候要做的就是将字符开始的位置搬运到这个重复字符第一次出现的位置之后的那个位置上就可以了。而我们怎么更新这个字符最新出现的位置呢?在一次循环的最后更新就可以了,非常的巧妙。

class Solution {
public:int lengthOfLongestSubstring(string s) {// Start typing your C/C++ solution below// DO NOT write int main() functionint locs[256];//保存字符上一次出现的位置memset(locs, -1, sizeof(locs));int idx = -1, max = 0;//idx为当前子串的开始位置-1for (int i = 0; i < s.size(); i++){if (locs[s[i]] > idx)//如果当前字符出现过,那么当前子串的起始位置为这个字符上一次出现的位置+1{idx = locs[s[i]];}if (i - idx > max){max = i - idx;}locs[s[i]] = i;}return max;}
};

关于leetcode第三题的巧妙解法相关推荐

  1. LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路

    笔者在完成LeetCode第三题(Longest Substring Without Repeating Characters)时,经历了设计.实现.优化三个阶段,于是通过这个三部曲系列,将当初的整个 ...

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

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

  3. LeetCode 三数之和 — 优化解法

    LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...

  4. LeetCode 148. Sort List--面试算法题--C++,Python解法

    LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...

  5. leetcode旋转数组 c语言,leetcode explore 初级算法第三题,旋转数组代码实现

    leetcode explore 初级算法第三题,旋转数组代码实现.原题链接: 题目分析 因为题目不是很长,这里把题目贴出来: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. ...

  6. 【LeetCode每日一题】【2021/12/8】689. 三个无重叠子数组的最大和

    文章目录 689. 三个无重叠子数组的最大和 方法1:滑动窗口 689. 三个无重叠子数组的最大和 LeetCode: 689. 三个无重叠子数组的最大和 困难\color{#EF4743}{困难}困 ...

  7. 刷题汇总(三)leetcode 精选50题 C++答案总结

    题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...

  8. [LeetCode]-Python刷题第三周(栈和队列)

    20. Valid Parentheses 合法括号(Easy) Given a string containing just the characters '(', ')', '{', '}', ' ...

  9. 【Leetcode】 刷题之路1(python)

    leetcode 刷题之路1(python) 看到有大佬总结了一些相关题目,想着先刷一类. 1.两数之和 15.三数之和 16.最接近的三数之和 11.盛最多的水 18.四数之和 454.四数相加II ...

最新文章

  1. ML基石_12_NonLinearTransformation
  2. Elasticsearch的Shield插件
  3. http缓存管理器_小心缓存管理器
  4. fabric canvas 清空并重置画布
  5. 【交往智慧】002.和优秀的人接触
  6. python导入opencv解决no module named cv2问题
  7. Access安全性之QA详解
  8. 酷客数据python基础实战答案_英语听力练习_日语_韩语_法语听力训练网站-沪江听力酷...
  9. html+css京东登录页面
  10. 中文免费电子书网站合集收藏
  11. eclipse 缓解眼睛疲劳保护眼睛
  12. 蓝海卓越无线运营方案简述
  13. 漫谈大数据 - 实时数据仓库以及大厂实际应用
  14. 流浪地球2真实成本多少?怎么参与?找谁参与?安全可靠吗?
  15. android返回首页
  16. 【Hexo】记录NexT主题美化及域名配置(图示详解)
  17. 浅析swift optional
  18. Java 压缩/混淆 JavaScript 代码
  19. Airtest入门案例-操作网易云音乐
  20. AMT49105:高度集成的 ASIL BLDC MOSFET驱动器IC

热门文章

  1. 利用CAD VBA批量插入多段线
  2. 【Word】怎样给论文添加引用参考文献
  3. 听厂家聊聊:矿井作业存在的危险以及常使用的劳保防护用品有哪些?
  4. 【Ubuntu Ip冲突时通过Netplan修改Ip】
  5. 国内哪个云平台比较靠谱?
  6. 专业的亮度蒙版PS插件:tkactions v7中文版
  7. K站神器-搜狗举报违规站点工具(含视频教程)
  8. 我的世界药水合成表图Java_我的世界手机版药水合成表 药水效果
  9. 速卖通开店流程及费用
  10. echarts radar雷达图常规使用