接
https://blog.csdn.net/MaYingColdPlay/article/details/105905939
1.無重複字符最長子串
雙指針法,用一個left指針,指向最左邊,一個cur指針,指向當前,記錄兩者之間的距離。
用一個列表來記錄當前無重複字符。如果有重複的子串,移動left指針。
不用兩個指針也可,直接用一個list來判斷就行了。list+從左邊pop出當前存在的。
2.最小路徑和
思路:
拿例子來說,dp[2][2]=min(dp[2][1],dp[1][2])+grid[2][2],其中等式右邊的dp也都是這麼求的。
dp[1][2]=min(dp[1][1],dp[0][2])+grid[1][2] ...動態規劃數學方程。
首先對dp賦初始值,初始值就是i=0和j=0的時候。
3.最長迴文子串
思路:用一個dp來表示從i到j是否爲迴文子串,首先初始化,dp[i][i]是True。
然後從index爲1開始進行遍歷,如果s[i]==s[j],分兩種情況,如果是兩個挨着的,是True,
如果不是挨着的,等於他上一個狀態。
判斷是否爲最大值,如果是最大值,記錄當前的下標i和max_len,從s中進行索引。
4.最長上升子序列
思路:動態規劃,dp[i]表示到位置i時的最長上升子序列,從0遍歷到i,如果nums[i]大於nums[j],
dp[i]=dp[j]+1,注意要選擇dp[i]與dp[j]+1的最大值。