[补题]匹配%#,%#之间的字符串重复%前的num遍

题目

匹配%#,%#之间的字符串重复%前的num遍。
样例1:
3%acm#2%acm#
输出:
acmacmacmacmacm
样例2:
3%2%acm##
输出:
acmacmacmacmacm

题解

两个栈实现。
算是做出来,只是bug差一点调完。
主要还是要熟悉java栈的使用。

代码

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String s=new String();
        s=sc.next();
        
        Stack<Character> ss=new Stack<>();//装原始字符串
        Stack<Character> ssPre=new Stack<>();//装#前面的部分,待遇到#弹出处理
        
        for(int j=s.length()-1;j>=0;--j) {//倒序入栈
            ss.push(s.charAt(j));
        }
        
        while(!ss.empty()) {
            Character c=ss.pop();
            if(c=='#') {
                Stack<Character> sTemp=new Stack<>();
                Character cTemp;
                while((cTemp=ssPre.pop())!='%') {
                    sTemp.push(cTemp);
                }
                int num=(int)(ssPre.pop()-'0');
                
                String strTemp=new String();//需要重复的串
                String strConn=new String();//重复后的串
                while(!sTemp.empty()) {
                    strTemp+=sTemp.pop();
                }
                while(num!=0) {
                    strConn+=strTemp;
                    --num;
                }
                for(int i=0;i<strConn.length();++i) {
                    ssPre.add(strConn.charAt(i));
                }
            }
            else {//没遇到#号则弹出入栈ssPre
                ssPre.add(c);
            }
        }
        
        Stack<Character> sAns=new Stack<>();
        while(!ssPre.empty()) {
            sAns.add(ssPre.pop());
        }
        String strAns=new String();
        while(!sAns.empty()) {
            strAns+=sAns.pop();
        }
        
        System.out.println(strAns);
    }
}

猜你喜欢

转载自www.cnblogs.com/coding-gaga/p/10924334.html
0条评论
添加一条新回复