c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”
生活随笔
收集整理的這篇文章主要介紹了
c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章來源: 飯飯的Python學(xué)習(xí)之路
作者: 一粒米飯
今天要挑戰(zhàn)的是“無重復(fù)字符的最長子串”。
難度:中等
題目描述:
給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的 最長子串 的長度。
示例1:
輸入:?"abcabcbb"輸出:?3?解釋:?因?yàn)闊o重復(fù)字符的最長子串是?"abc",所以其長度為 3。示例2:
輸入:?"bbbbb"輸出:?1解釋:?因?yàn)闊o重復(fù)字符的最長子串是?"b",所以其長度為 1。示例3:
輸入:?"pwwkew"輸出:?3解釋:?因?yàn)闊o重復(fù)字符的最長子串是?"wke",所以其長度為 3。???請注意,你的答案必須是?子串?的長度,"pwke"?是一個(gè)子序列,不是子串。題目原始鏈接
解題思路:
這道題的解題思路主要是利用滑動(dòng)窗口思維。
什么是滑動(dòng)窗口
滑動(dòng)窗口作為雙指針?biāo)惴ǖ囊环N特殊形式,在日常算法中尤其是字符串匹配查詢中經(jīng)常用到。
其基本思想是通過使用特定大小的子列表,在遍歷完整列表的同時(shí)進(jìn)行特定的操作,以達(dá)到降低了循環(huán)的嵌套深度。
滑動(dòng)窗口的基本邏輯如下:
代碼實(shí)現(xiàn):
class?Solution:????def?lengthOfLongestSubstring(self,?s:?str)?->?int:????????w?=?""????????l?=?0????????max_l?=?0????????for?c?in?s:????????????if?c?in?w:????????????????left?=?w.index(c)?+?1????????????????w?=?w[left:]????????????????l?-=?left????????????w?+=?c????????????l?+=?1????????????if?l?>?max_l:????????????????max_l?=?l????????return?max_l結(jié)果:
除了無重復(fù)字符的最長子串,滑動(dòng)窗口還可以用來解決連續(xù)子數(shù)組的最大和、和為特定值的連續(xù)正整數(shù)序列、長度最小的子數(shù)組等問題。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python继承多重继承
- 下一篇: spring mvc框架请求注解解析,内