试了很多次 ,但是好多都失败了,有些可能思路不对,有些可能内存爆了,运行时间超时。
我是基于这么一个思路,如果两个字符串str1,str2拼接在一起,那么怎么算产生的结果呢,应该是str1的数量*str2的数量 + str1.substring(0,str1.length-1)的数量 * str2.substring(1,str2.length)的数量*(str1.charAt(str1.length()-1)+str2.chatAt(0))的数量。
import java.util.*;


public class Solution {
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        // write code here
        int[] myInt = new int[nums.length()];
        ArrayList<String> goodString = new ArrayList<String>();
        for(int i = 1; i<= 26; i++){
            goodString.add(""+i);
        }
        if(goodString.contains(""+nums.charAt(0))){
            myInt[0] = 1;
        }
        else{
            myInt[0] = 0;
        }
        for(int i = 1; i<nums.length(); i++){
            int left = 0;
            if(goodString.contains(""+nums.charAt(i))){
                left = 1;
               // System.out.println(nums.charAt(i));
            }
            int right = 0;
            if(i - 2< 0){
                right = 1;
            }
            if(i-2>=0){
                right = myInt[i-2];
            }
            int n1 = left*myInt[i-1];
            int n2 = 0;
            if(goodString.contains(""+nums.charAt(i-1) + nums.charAt(i))){
                n2 = 1;
            }
            int n3 = n2*right;
            //System.out.println(""+n3);
            myInt[i] = n1 + n3;
            
        }
        return myInt[myInt.length - 1];
        
        /*
        int[] myInt = new int[nums.length()];
        myInt[0] = 1;
        ArrayList<String> goodString = new ArrayList<String>();
        for(int i = 1; i<= 27; i++){
            goodString.add("" + i);
        }
        for(int i = 1; i< nums.length(); i++){
            myInt[i] = myInt[i-1] ;
            if(!goodString.contains(""+ nums.charAt(i-1)+nums.charAt(i)) &&  !goodString.contains(""+nums.charAt(i))){
                return 0;
            }
            if(goodString.contains(""+ nums.charAt(i-1)+nums.charAt(i)) && goodString.contains(""+nums.charAt(i))){
                myInt[i] = myInt[i] + 1;
            }
        }
        return myInt[myInt.length - 1];
        */
        /*
        if(nums.length() == 0){
            return 1;
        }
      if(nums.length() == 1){
          if(goodString.contains(nums)){
              return 1;
          }
          else{
              return 0;
          }
      }
        int n1 = 0;
        int n2 = 0;
        String s = "" + nums.charAt(0);
        if(goodString.contains(s)){
            n1 = solve(nums.substring(1));
        }
        s=s+nums.charAt(1);
        if(goodString.contains(s)){
            n2 = solve(nums.substring(2));
        }
        return n1+n2;
        */
        
    }
    
    /*
    ArrayList<String> goodString = new ArrayList<String>();
    Solution(){
        for(int i = 1; i<= 26; i++){
            goodString.add("" + i);
        }
    }
    */
}