前言
今天这道题没太想出来,不太理解别人的解题思路,早上没太多时间了,写记录下博客,等想清楚了别人的思路,再进行补充
原题链接
2370.最长理想子序列
https://leetcode.cn/problems/longest-ideal-subsequence/
个人做题情况
第一次提交
对应代码:
class Solution {
public int longestIdealString(String s, int k) {
int max = 0;
//int head;
for (int i=0;i<s.length();i++){
//int index = i;
int head = s.charAt(i);
int count = 1;
//int min = s.charAt(i);
for (int j=i+1;j<s.length();j++){
if (Math.abs(s.charAt(j) - head) <= k){
head = s.charAt(j);
count++;
}
}
if (count > max){
max = count;
}
}
return max;
}
}
产生的问题:
(1)报错问题:
主要原因是直接小白式的一个一个尝试会错过最佳情况
比如: 1-2-4-3-8-9-10-11-12
假设我的最大间距是4,那么我只能最大取到1-2-4 或者8-9-11-12
但其实最大应该是1-2-4-8-9-10-11-12,就是我没有在可取的范围内进行dp尝试。
参考别人的代码
class Solution {
public int longestIdealString(String s, int k) {
int dp[] = new int [26];
int max = 0;
//int head;
for (int i=0;i<s.length();i++){
//int index = i;
int head = s.charAt(i)-'a';
int count = 1;
//int min = s.charAt(i);
for (int j=0;j<=k;j++){
int xiaxian = head - j;
int shangxian = head + j;
if(xiaxian >= 0 && xiaxian<26){
dp[head] = Math.max(dp[head],dp[xiaxian]);
}
if(shangxian >= 0 && shangxian<26){
dp[head] = Math.max(dp[head],dp[shangxian]);
}
}
dp[head]++;
max = Math.max(max,dp[head]);
// if (count > max){
// max = count;
// }
}
return max;
}
}
老实说,这个有点没太看懂,等我下午在研究研究里面的含义,来进行补充。。
上述代码含义:
补充
我感觉这样做题还是有些问题的,应该打算过几天我买的平板到了,开始看看算法书,然后在针对看的算法数,进行每天做一道题吧= =~