1. 定义dp数组dp[i],表示以字符i为结尾的满足题意的最长子序列。
2. 遍历给定的字符串,然后将当前字符与每个字母结尾的序列依次比较,在所有绝对值小于等于k的字符中取最大值。
class Solution {
public:
/*
dp[i]表示以i为结尾的字符的最长子序列
*/
int longestIdealString(string s, int k) {
vector<int> dp(26);
for(auto c : s){
/*
x是当前字符,y是序列的上一个字符
*/
int x = c - 'a';
int len = 0;
for(int y = 0; y < 26; y++){
if(abs(x - y)<=k){
len = max(len, dp[y] +1);
}
}
dp[x] = max(dp[x], len);
}
int res = 0;
for(int i =0; i < 26;i++){
res = max(res, dp[i]);
}
return res;
}
};