無(wú)重復(fù)字符最大子串

給定一個(gè)字符串,請(qǐng)你找出其中不含有重復(fù)字符的?最長(zhǎng)子串?的長(zhǎng)度。

示例?1:

輸入: "abcabcbb"

輸出: 3

解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 "abc",所以其長(zhǎng)度為 3。

示例 2:

輸入: "bbbbb"

輸出: 1

解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是 "b",所以其長(zhǎng)度為 1。

示例 3:

輸入: "pwwkew"

輸出: 3

解釋: 因?yàn)闊o(wú)重復(fù)字符的最長(zhǎng)子串是?"wke",所以其長(zhǎng)度為 3。

?? ? 請(qǐng)注意,你的答案必須是 子串 的長(zhǎng)度,"pwke"?是一個(gè)子序列,不是子串。

int?lengthOfLongestSubstring(char?*s){

????char?*p;

????char?*off;

????int?len?=?strlen(s);

????int?max?=?-1;

????if?(len?<=?1)?{?/*?入?yún)z查?*/

????????return?len;

????}

????for?(p?=?s;?p?<?s?+?len;)?{

????????int?temp[127]?=?{0};

????????int?count?=?1;

????????temp[*p]?=?count;

????????for?(off?=?p?+?1;?off?<?s?+?len;?off++)?{

????????????if?(temp[*off]?!=?0)?{

????????????????break;

????????????}?else?{

????????????????temp[*off]?=?count++;?/*?里面保存下一次p的增加步長(zhǎng)?*/

????????????}

????????}

????????if?(max?==?95)?{?/*?這個(gè)條件優(yōu)化最明顯?*/

????????????return?95;

????????}?else?if?(count?>?max)?{

????????????max?=?count;

????????}

????????/*?off不是遇見(jiàn)已存在的字符退出的,說(shuō)明結(jié)束了?*/

????????if?(temp[*off]?==?0)?{

????????????return?max;

????????}

????????p?+=?temp[*off];

????}

????return?max;

}

temp數(shù)組的下標(biāo)不使用temp[*off - 0]的方式,采用編譯器的類(lèi)型轉(zhuǎn)換。

ASCII碼中非控制類(lèi)可見(jiàn)字符就95個(gè),達(dá)到這個(gè)數(shù)據(jù)直接return,減少耗時(shí)最多。

p增加的步長(zhǎng)就是官方分析,不要加一的方式,采用跳步,直接跳到數(shù)組中重復(fù)字符的下一個(gè)位置,巧妙使用計(jì)數(shù)

作者:wang-yong-hao

鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/cma-suo-jian-hao-shi-shi-jian-fang-fa-by-wang-yong/

來(lái)源:力扣(LeetCode)

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容