先說結論:自己沒做出來,抄的別人的。
給定乙個字串,找出不含有重複字元的最長子串的長度。
示例:
給定"abcabcbb"
,沒有重複字元的最長子串是"abc"
,那麼長度就是3。
給定"bbbbb"
,最長的子串就是"b"
,長度是1。
給定"pwwkew"
,最長子串是"wke"
,長度是3。請注意答案必須是乙個子串,"pwke"
是 子串行 而不是子串。
7-24更新,自己在劍指offer上又看到這個題目了,重新做了一下:
動態規劃,
建立乙個陣列當雜湊錶用。本來用pos[26],結果測試用例中有很多非英語字元,所以用pos[256]
分兩種情況
字串為0,以後這個要最先考慮。
有其他的字元,pos陣列必須256大小。
陣列必須初始化為-1,因為0是存在的。
class solution ;
int pos[256]=;
for(int i=1;i<256;i++)
pos[i]=-1;
pos[s[0]]=0;
dp[0]=1;
int maxlen=1;
for (int i=1;idp[i-1])
else
pos[s[i]]=i;
}return maxlen;
}};
除錯**:
#include #include #include using namespace std;
int lengthoflongestsubstring(string s) ;
int pos[256]=;
for(int i=1;i<256;i++)
pos[i]=-1;
pos[s[0]]=0;
dp[0]=1;
int maxlen=1;
for (int i=1;idp[i-1])
else
pos[s[i]]=i;
} return maxlen;
}int main()
{ string str("abcabcbb");
int res=lengthoflongestsubstring(str);
cout《迴圈字串,找下乙個相同的字元,計算間隔。寫了半天發現是錯的。。。涼涼因為aab都過不了。。。
暴力搜尋:
迴圈所有字串,兩個迴圈,然後還要再判斷這個裡面重複不。用set來做。最後超時了。涼涼。。。
class solution {
public:
int lengthoflongestsubstring(string s) {
setmyset;
int res=0;
for(int i=0;i優化了一下,讓i從0到n-1;j從n開始往前走j--,如果發現不重複的子串,就沒有必要再往前走了。但是還是超時了。。。
class solution {
public:
int lengthoflongestsubstring(string s) {
setmyset;
int res=0;
int flag=0;
int success=0;
for(int i=0;ii;j--){
string s1(s,i,j-i);
for(int k=0;k又不甘心,再優化,感覺myset插入的時候太耗時間,改為手動排序子字串,結果還是超時啊。。。
class solution {
public:
int lengthoflongestsubstring(string s) {
// setmyset;
int res=0;
int flag=0;
int success=0;
for(int i=0;ii;j--){
string s1(s,i,j-i);
sort(s1.begin(),s1.end());
for(int k=0;k心態崩了。。。去看看人家的吧。
這個部落格講的太好:
leetcode 3 無重複的字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
leetcode 3 無重複字元的最長字元子串
堅持打卡!題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwk...
leetcode 3 最長無重複字串
3.longest substring without repeating characters 題面 given a string,find the length of the longest substring without repeating characters.給定字串,找到最長無重複字...