题解 | #字符串解码#

字符串解码

http://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92

//采用递归和字符串替换的解法

public class Solution {

public String decodeString (String s) {
   int length = s.length();
   //对特殊情况进行处理,只要包含有[字符就要递归下去
    if(length==3||!s.contains("[")){
        return s;
    }
    //存放要被替换的字符串
    Stack<StringBuilder> tempStack = new Stack<>();
    StringBuilder tempString;
    //存放替换的字符串
    Stack<StringBuilder> resultStack = new Stack<>();
    //定义替换的字符串
    StringBuilder resultString;
    //定义重复的次数
    int time;
    for (int i = 0; i < length-3; i++) {
    //判断
        if(Character.isDigit(s.charAt(i))&&s.charAt(i+1)=='['&&Character.isLetter(s.charAt(i+2))){
        //获取重复的次数
            time=s.charAt(i);
            tempString = new StringBuilder();
            resultString = new StringBuilder();
            tempString.append(s, i, i+2);
            int j = i+2;
            while (Character.isLetter(s.charAt(j))){
                tempString.append(s.charAt(j));
                resultString.append(s.charAt(j));
                j++;
            }
            tempString.append(']');
            tempStack.add(tempString);
            String temp = resultString.toString();
            StringBuilder result = new StringBuilder();
            for (int k = 0; k < time-48; k++) {
                result.append(temp);
            }
            resultStack.add(result);
        }
    }
    //进行替换
    Iterator<StringBuilder> tempIterator = tempStack.iterator();
    Iterator<StringBuilder> resultIterator = resultStack.iterator();
    while (tempIterator.hasNext()) {
        s=s.replace(tempIterator.next(), resultIterator.next());
    }
    //递归替换
    return decodeString(s);
}

}

全部评论

相关推荐

12-15 18:00
巨人网络_招聘
投递巨人网络等公司10个岗位
点赞 评论 收藏
分享
11-23 15:14
中原工学院 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
牛客36400893...:我不是这个专业的,但是简历确实没有吸引我的亮点,而且废话太多没耐心看
0offer是寒冬太冷还...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务