A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卓礼敏 中级黑马   /  2013-4-16 20:02  /  1507 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈丽莉 于 2013-4-16 22:33 编辑

将字母A-Z编码,A为1,B为2,……依此类推,Z为26;则ABC编码为123。但是反向解码时,解码结果不唯一,比如123可以解码为 1-2-3:ABC,解码为12-3:LC,解码为1-23:AW(注意,127不能解码为1-27,因为范围只能为1-26)。
现给出一组编码后的数字串,让你求该数字串可以有几种解码方式(上例中,123对应着3种解码方式)。问题输入将保证其为一个合法的数字串。比如100是 一个不合法的数字串,因为0或者00不代表一个字母;此外01不能视为1。
  Sample Input
25114 1111111111 3333333333
Sample Output
6 89 1


这到题怎么下手,想了那么多一点头绪都没有,大神给个思路啊

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
哥们。你在考验我们的眼力吗?
回复 使用道具 举报
递归.....
回复 使用道具 举报
{:soso_e134:}敢不敢 编辑一下!我的眼睛!
回复 使用道具 举报
天啊!看完了,眼都晕了,高手在哪里?
回复 使用道具 举报
这个越看越像 老毕视频里讲的那个求最大相同字串的例子

改一下条件,求其最多有俩个相同字串的情况
String[] ss = {"0","01","02","03","04","05","06","07","08","09");
private static String getString(String s){

  for(int x=0;x<2; x++){
      for(int start=0,end=2-x;end != s.length()+1; start++,end++){
               String s1 = s.substring(start,end);
                              
//此处代码去查表实现,并带上条件,排除以上不可以实现的地方
          for(String s : ss){
                      if(s==s1){
                         s2 = s.substring(end-1,s.length());
                         getString(s2);
                      }
           }
           int i = Integer.parseInt(s1);
           if(i>= 27 || i<=99){
                         s2 = s.substring(end-1,s.length());
                         getString(s2);
           }
      }
   }
}
当x=0时候,取的是一个字符串数字对应的编码,遇到 0 应将 之前的一位看做是一起的 字符串 ,这时取其字串重新 进行递归 运算
当x=1时候,取的是所有两个字符串数字对应的编码,由于此处编码形式只包含首字符串为1 或者为 2 的数,判断时应考虑全面,数值区间不在1--26之间的所有数值应该取其字串进行递归运算,总之好麻烦。
一个字符的子串中出现0,就得把0归结为上一个字串的内容,取剩余的后面的作为子串进行递归运算
两个字符的字串出现0开头的,或者 27  至 99 之间的所有数值 都需要取其 前一位开头的字串
数值尽量少些,尽量避免内存泄露
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马