給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
字元陣列和字串的區別,c語言字元陣列和字串區別詳解
開始的想法是在對字元陣列設定兩個指標,初始化乙個在位置0乙個在位置1,ans初始化為1(非空),然後1向後找,0不動,取0到1之間的字串,判斷是否重複(這裡單獨寫乙個函式,輸入字串,輸出是否重複以及重複字元的後乙個的位置),不重複的話用後位置減去前位置,再和ans比較,大的話就保留。如果有重複則前位置向後移動一位,後位置在其後面一位,接著判斷之間的字串是否重複。
#include usingnamespace
std;
//判斷是否有重複
bool re_or_not(string
s) }
}std::cout
<< "
false
"
false;}
int lengthoflongestsubstring(string
s)
else
}return
num;
}int
main()
986 / 987 個通過測試用例
狀態:超出時間限制
真的尷尬
再來:優化,不用那個substring函式了
#include usingnamespace
std;
//判斷是否有重複
bool re_or_not(string s,int begin,int
end)}}
std::cout
<< "
false
"
false;}
int lengthoflongestsubstring(string
s)
else
}return
num;
}int
main()
還是超時間;
再來:因為所有字元只有256個,所以定義這樣乙個陣列來判斷重複就行了,同時,在遇到重複時,begin和end都後移一位
//判斷是否有重複並輸出位置
bool re_or_not(std::string s,int begin,int end)
;for(int i = begin; i
int lengthoflongestsubstring(string s)
else
}return num;
}執行用時: 612 ms, 在longest substring without repeating characters的c++提交中擊敗了0.98% 的使用者
記憶體消耗: 332.3 mb, 在longest substring without repeating characters的c++提交中擊敗了0.93% 的使用者
這時間。。。。。,看來要大改了
還是上面的256的思路
#include #includeusing
namespace
std;
int lengthoflongestsubstring(std::string
s) ;
int num=1
;
int begin=0
;
for(int i=0;i)
else
//重複了,所以要把begin的位置更新到re中對應的字元對應的位置
re[s[i]]=i+1;//
+1是為了防止出錯,因為i是從0開始的,後面的都要判斷是否為0,所以要區別開
std::cout << "
此時i=
"<< i << "
此時num=
"<< num <}
return
num;
}int
main()
執行用時: 32 ms, 在longest substring without repeating characters的c++提交中擊敗了49.69% 的使用者
記憶體消耗: 14.7 mb, 在longest substring without repeating characters的c++提交中擊敗了0.93% 的使用者
還可以吧
Leetcode刷題之路 3 無重複的最長字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
LeetCode刷題之路 無重複字元的最長子串
無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 s bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入...
LeetCode 刷題 3 無重複最長子串
題目描述 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。測試示例 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。輸入 pwwkew 輸出 3 解釋 因為...