Decode Ways

MediumStringDynamic Programming

Solution

export function numDecodings(s: string): number {
  if (s === '') {
    return 0;
  }
 
  const N = s.length;
  const dp = new Array(N + 1).fill(0);
  dp[0] = 1;
  dp[1] = s[0] !== '0' ? 1 : 0;
 
  for (let i = 2; i <= N; i++) {
    const oneDigit = parseInt(s[i - 1]);
    const twoDigit = parseInt(s[i - 2] + s[i - 1]);
    if (oneDigit !== 0) {
      dp[i] += dp[i - 1];
    }
    if (10 <= twoDigit && twoDigit <= 26) {
      dp[i] += dp[i - 2];
    }
  }
 
  return dp[N];
}