字符串解码的几种方法?

时间:2019-03-04 04:00:01

标签: java algorithm data-structures

我正在处理需要解码字符串的问题。

  

包含A-Z字母的消息被编码为数字   使用以下映射:

     

'A'-> 1

     

'B'-> 2

     

...

     

'Z'-> 26

     

给出一个仅包含数字的非空字符串,确定总数   解码方式的数量。

     

示例1:

     

输入:“ 12”

     

输出:2

     

说明:可以将其解码为“ AB”(1 2)或“ L”(12)。

     

示例2:

     

输入:“ 226”

     

输出:3

     

说明:可以将其解码为“ BZ”(2 26),“ VF”(22 6)或“ BBF”(2 2 6)。

我想出了以下递归方法,但是对于此输入“ 227”它给出了错误的输出。输出应为“ 2”,但我的程序给出的值为“ 3”:

  public static int decodeWays(String data) {
    return helper(data, data.length());
  }

  private static int helper(String data, int k) {
    if (k == 0)
      return 1;
    int s = data.length() - k;
    if (data.charAt(s) == '0')
      return 0;

    int result = helper(data, k - 1);
    if (k >= 2 && Integer.parseInt(data.substring(0, 2)) <= 26) {
      result += helper(data, k - 2);
    }
    return result;
  }

我的上述方法有什么问题?

1 个答案:

答案 0 :(得分:2)

在此行-

if (k >= 2 && Integer.parseInt(data.substring(0, 2)) <= 26) {

您始终检查相同的2位数字data.substring(0, 2)。而是考虑类似

data.substring(data.length()-k, data.length()).substring(0, 2)

data.substring(data.length()-k, data.length()-k+2)