2370. Longest Ideal Subsequence
Medium
You are given a string s
consisting of lowercase letters and an integer k
. We call a string t
ideal if the following conditions are satisfied:
-
t
is a subsequence of the strings
. - The absolute difference in the alphabet order of every two adjacent letters in
t
is less than or equal tok
.
Return the length of the longest ideal string.
A subsequence is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters.
Note that the alphabet order is not cyclic. For example, the absolute difference in the alphabet order of 'a'
and 'z'
is 25
, not 1
.
Example 1:
-
Input:
s = "acfgbd", k = 2
-
Output:
4
-
Explanation: The longest ideal string is
"acbd"
. The length of this string is4
, so4
is returned. Note that"acfgbd"
is not ideal because'c'
and'f'
have a difference of3
in alphabet order.
Example 2:
-
Input:
s = "abcd", k = 3
-
Output:
4
-
Explanation: The longest ideal string is
"abcd"
. The length of this string is4
, so4
is returned.
Constraints:
1 <= s.length <= 105
0 <= k <= 25
- s consists of lowercase English letters.
Solution:
class Solution {
/**
* @param String $s
* @param Integer $k
* @return Integer
*/
public function longestIdealString($s, $k) {
// dp[$i] := the longest subsequence that ends in ('a' + $i)
$dp = array_fill(0, 26, 0);
for ($i = 0; $i < strlen($s); $i++) {
$c = $s[$i];
$charIndex = ord($c) - ord('a');
$dp[$charIndex] = 1 + $this->getMaxReachable($dp, $charIndex, $k);
}
return max($dp);
}
private function getMaxReachable($dp, $i, $k) {
$first = max(0, $i - $k);
$last = min(25, $i + $k);
$maxReachable = 0;
for ($j = $first; $j <= $last; $j++) {
$maxReachable = max($maxReachable, $dp[$j]);
}
return $maxReachable;
}
}
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!
Top comments (0)