leetcode3:無重複字元的最長字串問題
問題描述
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
這道題,我自己的思路就是利用雙指標儲存滑動視窗的上下線。具體利用hashmap儲存每乙個元素的位置資訊,然後取資料的時候,如果hashmap中存在,那麼我們可以知道元素的視窗開始變化。
publicintlengthoflongestsubstring(string s) else
} else if (i == len - 1)
maps.put(dest, i);
*/if
(maps.containskey(dest))
max = math.max(max, i - low + 1);
maps.put(dest, i + 1);
}return
max;
}
抓住問題的特殊點,因為表示的是字串,那麼可以用128維的陣列來儲存字串中的每乙個字元。也就是說可以利用陣列替換hashmap.
/*** 利用字串ascii碼來替代hashmap
* @param
s *
@return
*/public
intlengthoflongestsubstringtrick(string s)
return
max;
}
也可以把問題轉換為乙個dp問題,dp動態方程是,dp[i]表示以位置i上的資料結尾的最長字串的長度。那麼dp[i]取值範圍,最大為dp[i-1]+1, 最小為1。 當然此方法醉花情況下複雜度為o(n^2)
/*** 狀態轉移方程 dp[i]表示以i為結尾的連續字串的最大長度 dp[i]=取值範圍**
@param
s *
@return
*/public
intlengthoflongestsubstringdp(string s)
prenum =cnum;
max = max > cnum ?max : cnum;
}return
max;
}
無重複字元的最長字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
無重複字元的最長字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 這種字串字串問題,經常用到滑動...
無重複字串的最長字串
無重複字元的最長子串 難度中等 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3...