zoukankan      html  css  js  c++  java
  • [补题]匹配%#,%#之间的字符串重复%前的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);
    	}
    }
    
  • 相关阅读:

    队列
    Collection类
    Hashtable类、IdentityHashMap和WeakHashMap类
    LinkedHashMap类
    广播的种类:有序广播和无序广播
    自定义的BroadCastReceiver
    String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。
    BroadcastReceiver的最简单用法
    Notification通知栏
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10924334.html
Copyright © 2011-2022 走看看