LeetCode演算法題目 3

2021-10-08 05:34:09 字數 1558 閱讀 1240

給定乙個字串,找出其中不含有重複字元的最長子串的長度。

示例 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 針對大於 當前得到的最...