class Solution:
def longestIdealString(self, s: str, k: int) -> int:
def dfs(i, prev):
if i == len(s):
return 0
skip = dfs(i + 1, prev)
include = 0
if prev == "" or abs(ord(s[i]) - ord(prev)) <= k:
include = 1 + dfs(i + 1, s[i])
return max(skip, include)
return dfs(0, "")class Solution:
def longestIdealString(self, s: str, k: int) -> int:
cache = [[-1] * 27 for _ in range(len(s))]
def dfs(i, prev):
if i == len(s):
return 0
if cache[i][prev + 1] != -1:
return cache[i][prev + 1]
skip = dfs(i + 1, prev)
include = 0
c = ord(s[i]) - ord('a')
if prev == -1 or abs(c - prev) <= k:
include = 1 + dfs(i + 1, c)
cache[i][prev + 1] = max(skip, include)
return cache[i][prev + 1]
return dfs(0, -1)class Solution:
def longestIdealString(self, s: str, k: int) -> int:
dp = [[0] * 26 for _ in range(len(s) + 1)]
for i in range(1, len(s) + 1):
curr = ord(s[i - 1]) - ord('a')
for prev in range(26):
dp[i][prev] = max(dp[i][prev], dp[i - 1][prev])
if abs(curr - prev) <= k:
dp[i][curr] = max(dp[i][curr], 1 + dp[i - 1][prev])
return max(dp[len(s)])class Solution:
def longestIdealString(self, s: str, k: int) -> int:
dp = [0] * 26
for c in s:
curr = ord(c) - ord('a')
longest = 1
for prev in range(26):
if abs(curr - prev) <= k:
longest = max(longest, 1 + dp[prev])
dp[curr] = max(dp[curr], longest)
return max(dp)