字符串的解码

一条包含字母A–Z的信息通过以下方式进行了编码:

‘A’–> 1

‘B’–> 2

’Z’–> 26

给定一个只包含数字的非空字符串,请计算编码方法的总数。

输入描述:

一个只包含数组的非空字符串

输出描述:

3

解释:它可以解码为”BZ"(2,26), “VF”(22,6),或者“BBF"(2,2,6)。

示例1

输入

226

输出:

3

分析:

字符串长度为0时,输出为0;

当字符串长度为1时, 输出为1;

字符串长度为2时,分为两种情况:

1)可以组成1<=AB<=26,则分成(A,B )和(AB) 输出2;

2)不能组成1<=AB<=26,则只有一种情况(A,B )。

所以是动态规划的fun(n)=fun(n-1)+fun(n-2)的情形,n为数组长度。

char[] c=str.toCharArray();//字符串str转位char 数组

代码:

public class Main0 {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        String str=sc.nextLine();//例如:1226
        int len=str.length();
        int count= fun(str,0,len);//数组的长度
        System.out.println(count);
    }

    private static int fun(String str,int low,int n) {
        int count =0,len=n;
        if(n==0)
            return 0;
        if(n==1)
            return 1;

        /**
         * fun(str,i,n)
         * 其中,i表示下标, n-1 表示字符串长度
         */
        for(int j=0;j0){//一般情形,数组长度大于2的情况
                    count=fun(str,j+2,n-2)+fun(str,j+1,n-1);
                }else{//考虑特殊情况,数组长度为2的情况。  例如str=26,可以组成{2,6 }  和{26}
                    count=fun(str,j+1,n-1)+1;
                }
            }else{//第一个数字无法与第二个数字配对时
                count=fun(str,j+1,n-1);
            }
        }
        return  count;
    }
}

你可能感兴趣的:(java)