[补题]匹配%#,%#之间的字符串重复%前的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);
	}
}

posted on 2019-05-25 22:45  coding_gaga  阅读(1168)  评论(0编辑  收藏  举报

导航