C++實(shí)現(xiàn)無(wú)重復(fù)字符的最長(zhǎng)子串
題目及要求:
給定一個(gè)字符串 s ,請(qǐng)你找出其中不含有重復(fù)字符的 最長(zhǎng)子串 的長(zhǎng)度。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、數(shù)字、符號(hào)和空格組成
原創(chuàng)代碼:
class Solution { public: int lengthOfLongestSubstring(string s) { int begin=0;//每個(gè)當(dāng)前子串的開(kāi)頭 int end=0;//每個(gè)當(dāng)前子串的末尾 int value=0;//判斷下一個(gè)字符是否屬于當(dāng)前子串 int max=0;//記錄歷史字串的最大元素個(gè)數(shù) int now=0;//儲(chǔ)存當(dāng)前字串的元素個(gè)數(shù) string str;//代表當(dāng)前字串 if(s.size()==0) return 0; while(end<=(s.size()-1)) { value=str.find(s[end],0); if(value!=-1) { str.erase(0,value+1); begin=end-(str.size()-value); } str.push_back(s[end]); now=str.size(); max=now>max?now:max; end++; } return max; } };
輸出示例:
示例 1:
輸入: s = “abcabcbb”
輸出: 3
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 “abc”,所以其長(zhǎng)度為 3。
示例 2:
輸入: s = “bbbbb”
輸出: 1
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 “b”,所以其長(zhǎng)度為 1。
示例 3:
輸入: s = “pwwkew”
輸出: 3
解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 “wke”,所以其長(zhǎng)度為 3。
請(qǐng)注意,你的答案必須是 子串 的長(zhǎng)度,“pwke” 是一個(gè)子序列,不是子串。
示例 4:
輸入: s = “”
輸出: 0
代碼思路:
首先:
定義變量
int begin=0;//每個(gè)當(dāng)前子串的開(kāi)頭 int end=0;//每個(gè)當(dāng)前子串的開(kāi)頭 int value=0;//判斷下一個(gè)字符是否屬于當(dāng)前子串 int max=0;//記錄歷史字串的最大元素個(gè)數(shù) int now=0;//儲(chǔ)存當(dāng)前字串的元素個(gè)數(shù) string str;//代表當(dāng)前字串
其次:
通過(guò)以下條件判斷形參string s是否為空字符串
if(s.size()==0) return 0;
再其次:
若形參string s不是空字符串,由于
int end=0;//每個(gè)當(dāng)前子串的末尾
則用end來(lái)引入新元素,每判斷一次新元素與當(dāng)前子串的關(guān)系,則end++
最后:
若新元素與當(dāng)前的關(guān)系表明新元素不與當(dāng)前子串內(nèi)的元素重復(fù)則直接將新元素加入子串,若新元素與當(dāng)前的關(guān)系表明新元素與當(dāng)前子串內(nèi)的元素重復(fù)則將子串含有沖突元素的前半部分刪除并將新元素加入到當(dāng)前子串
反思所得:
在本次編程過(guò)程中我經(jīng)常出現(xiàn)提示堆棧內(nèi)存溢出的問(wèn)題,之后發(fā)現(xiàn)是對(duì)形參string s是空字符串的情況沒(méi)加以控制,在未來(lái)的編程中我會(huì)更加注意。
而且我還學(xué)會(huì)了利用條件運(yùn)算符來(lái)記錄記錄歷史字串的最大元素個(gè)數(shù),即
max=now>max?now:max;
LeetCode鏈接:
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
到此這篇關(guān)于C++實(shí)現(xiàn)無(wú)重復(fù)字符的最長(zhǎng)子串的文章就介紹到這了,更多相關(guān)C++ 無(wú)重復(fù)字符的最長(zhǎng)子串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)
相對(duì)于操作NandFlash,操作NorFlash相對(duì)簡(jiǎn)單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒(méi)有OOB區(qū)域,也跟ECC沒(méi)有關(guān)系。讀寫(xiě)擦除相對(duì)容易,下面看個(gè)例子吧2013-12-12Cocos2d-x保存用戶(hù)游戲數(shù)據(jù)之XML文件是否存在問(wèn)題判斷方法
這篇文章主要介紹了Cocos2d-x保存用戶(hù)游戲數(shù)據(jù)之XML文件是否存在問(wèn)題判斷方法,請(qǐng)注意代碼中包含大量注釋,需要的朋友可以參考下2014-09-09數(shù)據(jù)結(jié)構(gòu)之伸展樹(shù)詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之伸展樹(shù)詳解,本文對(duì)伸展樹(shù)(Splay Tree)的單旋轉(zhuǎn)操作、一字型旋轉(zhuǎn)、之字形旋轉(zhuǎn)區(qū)間操作等理論知識(shí)做了講解,并給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-08-08如何用C++實(shí)現(xiàn)雙向循環(huán)鏈表
本篇文章是對(duì)用C++實(shí)現(xiàn)雙向循環(huán)鏈表的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言課程設(shè)計(jì)之抽獎(jiǎng)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言課程設(shè)計(jì)之抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07