找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

微信名称:美国米群网

微 信 号:MeetQun

微信QQ:群: 320065698

查看: 278|回复: 3
收起左侧

[刷题记录板] 394. Decode String

[复制链接]

23

主题

0

精华

28

积分

新米人

Rank: 1

积分
28
发表于 11-29-2016 05:44 AM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1.     public String decodeString(String s) {
  2.         Stack<String> s1 = new Stack<>();
  3.         Stack<Integer> s2 = new Stack<>();
  4.         if (s.length()==0) return "";
  5.         
  6.         char[] c = s.toCharArray();
  7.         int i=0;
  8.         
  9.         while (i<c.length){
  10.             
  11.             if (Character.isDigit(c【i】)){
  12.                
  13.                 int digit = 0;
  14.                 while (Character.isDigit(c【i】)){
  15.                     digit = digit*10+Integer.valueOf(s.substring(i,i+1) );
  16.                     i++;
  17.                 }
  18.                 s2.push(digit);
  19.             }
  20.             else if (c【i】=='['){
  21.                 s1.push("[");
  22.                 i++;
  23.             }
  24.             else if (c【i】==']'){
  25.                 StringBuilder tmp = new StringBuilder();
  26.                 tmp.append(s1.pop());
  27.                
  28.                 s1.pop();
  29.                 int num = s2.pop();
  30.                 String oneString = tmp.toString();
  31.                
  32.                 for (int j=0;j<num-1;j++){
  33.                     tmp=tmp.append(oneString);
  34.                 }
  35.                 String repeatedString = tmp.toString();
  36.                 if (!s1.isEmpty() && !s1.peek().equals("[") ){   //need to check bracket to know if there is a previous string that we need to concatenate
  37.                     s1.push(s1.pop()+repeatedString);
  38.                 }
  39.                 else
  40.                     s1.push(repeatedString);
  41.                 i++;
  42.             }
  43.             else{
  44.                 StringBuilder tmp = new StringBuilder();
  45.                 while (i<c.length &&  Character.isLetter(c【i】)){
  46.                     tmp.append(c【i】);
  47.                     i++;
  48.                 }
  49.                 if (s1.isEmpty() || s1.peek().equals("["))  // need to check "[" to know whether "2[abc]3[cd]ef" will happen
  50.                     s1.push(tmp.toString());
  51.                 else
  52.                     s1.push(s1.pop()+ tmp.toString());
  53.             }
  54.             
  55.             
  56.         }
  57.         return s1.pop();

  58.         
  59.     }
复制代码

0

主题

0

精华

8

积分

新米人

Rank: 1

积分
8
发表于 11-29-2016 05:51 AM 来自美国米群网手机版 | 显示全部楼层
感谢taoqi610分享~~~
回复 支持 反对

使用道具 举报

0

主题

0

精华

12

积分

新米人

Rank: 1

积分
12
发表于 11-29-2016 08:28 AM | 显示全部楼层
感谢taoqi610分享~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表