每日一題 leetcode3無重複字元的最長子串

2022-09-19 06:48:10 字數 922 閱讀 9864

題目描述

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

示例

輸入: s = "abcabcbb"

輸出: 3 

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

題目分析

要求從字串中找到最長的不含重複字元的子串,那麼就存在乙個區間[start,end],在這個區間內,每個字元不重複且長度最長。怎麼找到這個區間呢?首先設定兩個指標start和end,start指向區間開始,end指向區間結束,初始都指向s開始,同時我們需要知道字元是否出現過,此時申請乙個set,記錄start-end出現的字元,向右移動end指標,若沒有出現,則加入該字元入set,繼續向右移動,若已經出現,此時需要移動start指標的位置到之前該字元出現位置的下乙個位置,繼續移動end,這個方法有個官方的名字--滑動視窗。下面**一下,更直觀。

解法1

public

intlengthoflongestsubstring(string s)

//開始指標和結束指標均指向第乙個位置

int start = 0, end = 0;

setset = new hashset<>();

int max = 1;

set.add(s.charat(start));

++end;

while (start <= end && end

++start;

++end;

} else

}int ans = end -start;

max =math.max(max, ans);

return

max;

}

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

leetcode每日一題 435 無重疊區間

題目 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。思路 貪心演算法 將所有區間按右端點進行排序,並將第乙個區間作為符合條件的初始區間,並記其右端點為right,則按序查詢首個...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...