給定乙個字串,找出其中不含有重複字元的最長子串的長度。
示例 1:
輸入:"abcabcbb"輸出:3解釋:因為無重複字元的最長子串是"abc",所以其
長度為 3。
示例 2:
輸入:"bbbbb"輸出:1解釋:因為無重複字元的最長子串是"b"
,所以其長度為 1。
示例 3:
輸入:"pwwkew"輸出:3解釋:因為無重複字元的最長子串是/*暴力解法(可以執行但是提交是沒有通過)*/"wke"
,所以其長度為 3。請注意,你的答案必須是子串的長度,
"pwke"
是乙個子串行,不是子串。
首先拿到字串的所有子串,通過兩次迴圈可以實現拿到所有字串的區間,採用[i,j)(左閉右開)的區間。
實現乙個方法,用來判斷傳入的字串在一段區間內是否存在重複,借助hashset。
假設這段區間內的字串沒有重複字元,則要去對比更新最大字串的值。
//暴力解法
class solution
}return max_len;
}//判斷當下子串中有無重複的字元
public boolean uniquechar(string s, int i, int j)
//否則,將該元素加入
hs.add(s.charat(temp));
}return true;
}}
hashset:
hashmap:
hashset與hashmap的區別:
/*滑動窗*/
暴力解法時間複雜度較高,會達到 o(n^2),採取滑動視窗的方法降低時間複雜度o(n);
使用hashmap;
定義不重複子串開始位置—start,結束位置—end;
隨著 end 不斷遍歷向後,可能會遇到與 [start, end] 區間內字元相同的情況,此時將字元作為 key 值,獲取其 value 值,更新 start,所得到新的 [start, end] 區間內不存在重複字元;
每次都會更新map與max_len。
/*滑動視窗—借助hashmap*/
class solution
//判斷當下的最長子串的長度,同時更新
max_len = math.max(max_len, end - start + 1);
//新增元素
map.put(s.charat(end),end + 1);
}return max_len;
}}
LeetCode演算法題目 7
題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。解決方案 反轉整數的方法可以與反轉字串進行模擬。我們想重複 彈出 xx 的最後一位...
LeetCode演算法題目 4
給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 n...
leetcode演算法題目 5
給定乙個字串s,找到s中最長的回文子串。可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 暴力解法 1 依據回文串定義,遍歷列舉所有長度大於等於 2的子串,依次判斷是否為回文串 2 針對大於 當前得到的最...