給定入棧序列判斷給定出棧序列是否合法(Exercise1_3_45,java)
package chapterone;
import java.util.Scanner;
import java.util.Stack;
/***
* @author luodijack
*
* thinking: 用一個輔助棧,將入棧序列按照某種順序入棧,看是否可以產生出棧序列即可。
* 1)如果當前棧為空,且入棧序列不空,則入棧序列的下一個元素入棧;
* 2)如果當前輔助棧的棧頂元素不等於出棧序列的首元素,那麼入棧序列一直入棧,直到入棧序列為空。
* 3)如果當前輔助棧的棧頂元素等於出棧序列的首元素,那麼棧頂元素彈出,出棧序列第一個元素移走;
* 4)如果入棧序列為空,出棧序列第一個元素仍然不等於棧頂元素,則表示2個序列是不匹配的。
*/
public class Exercise1_3_45 {
private static boolean judgeIsMatched(String a, String b) {
boolean flag = true;
Stack<String> assistantStack = new Stack<String>();
char[] inOrder = a.toCharArray();
char[] outOrder = b.toCharArray();
int index = 0 ;
for (int i = 0; i < inOrder.length; i++) {
while (!assistantStack.isEmpty()
&& assistantStack.peek().equals(
String.valueOf(outOrder[index]))) {
index++;
assistantStack.pop();
}
assistantStack.push(String.valueOf(inOrder[i]));
}
while (!assistantStack.isEmpty()
&& assistantStack.peek()
.equals(String.valueOf(outOrder[index]))) {
index++;
assistantStack.pop();
}
if (!assistantStack.isEmpty()) {
flag = false;
}
return flag;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String a, b;
System.out.println("please input the inOrder string");
a = scan.next();
while (true) {
System.out.println("please input the string that need to match");
b = scan.next();
// scan.close();
if (judgeIsMatched(a, b) == true) {
System.out.println("Matched!");
} else {
System.out.println("Not Matched!");
}
}
}
}
相關推薦
給定入棧序列判斷給定出棧序列是否合法(Exercise1_3_45,java)
package chapterone; import java.util.Scanner; import java.util.Stack; /*** * @author luodijack *
給定入棧序列判斷給定出棧序列是否合法
題目:輸入兩個整數序列。其中一個序列表示棧的入棧順序,判斷另一個序列有沒有可能是對應的出棧順序。思路:用一個輔助棧,將入棧序列按照某種順序入棧,看是否可以產生出棧序列即可。 1)如果當前棧為空,且入棧
給出一個入棧序列和一個出棧序列,判斷出棧序列是否是入棧序列對應的出棧序列
注意:在入棧的過程中,並不是所有元素都入棧了之後才出棧,也可能是入棧幾個元素,出棧一個或多個,然後再繼續入棧,入棧序列只能保證所有元素按規定順序入棧。 思路:利用一個輔助棧和一個指向出棧序列第一個元素的下標(int count = 0;),利用一個迴圈在遍歷入棧序列入棧的同
判斷是否出棧的順序滿足入棧順序-Java
傳入兩個陣列,一個代表入棧順序,一個代表出站順序,返回一個boolean值表示這個出棧順序是否滿足入棧順序。 比如: 傳入: 12345 43512 返回: false 按理來說這是一道非常簡單的題,但是我還是用了至少半個
棧和佇列的面試題(五)---判斷元素出棧、入棧順序的合法性
題目: 如:入棧的序列(1,2,3,4,5),出棧序列為 (4,5,3,2,1)是合法序列, 入棧的序列(1,2,3,4,5),出棧序列為(1,5,3,2,4)是不合法序列 一:判斷元素出
棧的基本操作 出棧與入棧
article 安全 empty scan -s type fine mod pos #include<stdio.h> #include<stdlib.h> #define LENGTH 100 //初始分配棧的長度 #define ADD
php棧的定義和出棧、入棧的實現
棧是線性表的一種,他的特點是後入先出,可以這麼理解,棧就像一個存東西的盒子,先放進去的在最底層,後放進去的在上層,因為上層的東西把底層的東西壓住了,下層的想要出去就必須把上層的先拿開才行。 定義:棧是限制插入和刪除都只能發生在一個位置上進行的線性表,該位置是線性表的末端,叫做棧的頂。 口訣:“後進先出”,
【資料結構】實現一個棧要求實現Push(出棧)Pop(入棧)Min(返回最小值)的時間 複雜度為O(1)
文章目錄 思路 MinStack.h MinStack.c Test.c 棧的基本實現: https://blog.csdn.net/weixin_41892460/article/details/8297385
[差分序列] 判斷給出的牌能否只出順子出完 101775L SOS
J. Straight Master time limit per test 2.0 s memory limit per test 256 MB input standard input output standard output A straight is
判斷其是否為一個迴文串,java實現
給定一個字串,判斷其是否為一個迴文串。只包含字母和數字,忽略大小寫。 您在真實的面試中是否遇到過這個題? Yes 樣例 "A man, a plan, a canal: Panama" 是一個迴文。
2020 年度程式語言排行榜出爐!C 語言稱霸,Java 遭遇滑鐵盧…….
最近,**TIOBE** 釋出了過去一年的程式語言排行榜: ![](https://img2020.cnblogs.com/other/1218593/202101/1218593-20210108111919642-1339502615.png) 資料來源TIOBE: > https://www
判斷給定序列是否是對應入棧序列的出棧序列(C++)
題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。 (假設壓入棧的所有數字均不相等) 如 序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓
已知一個棧的入棧序列,判斷給定的一個序列是否為其出棧序列
思路:(1)棧為後入先出序列(2)將入棧序列的元素一個一個入棧然後和出序列中每個元素比較。取序列第一個元素時,把第一個序列的各個元素依次入棧,然後入棧一個後和序列元素比較,如果相同那麼將這個元素出棧,並
給定一個序列,判斷該序列是否是對應輸入序列的出棧序列問題
n) 建立 args scanner stack exti ati 壓入 以及 最近在刷劍指offer的題目,有問題描述如下: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,
給定入棧順序,判斷出棧順序是否合法
給定一個入棧順序,判斷出棧順序是否有可能發生,所遵循的方法是使用一個輔助棧記錄入棧的元素,當剛開始時候輔助棧為空,入棧元素第一個壓入輔助棧,接下來如果看出棧順序,如果出棧順序的第一個元素和輔助棧的棧頂元素不相等,則繼續把 入棧元素的下一個壓入輔助棧;如果出棧順序
【100題】給定入棧序列,判斷一個序列是否可能為輸出序列
#include <stack> #include <iostream> using namespace std; /* 假設序列中無重複數字 輸入序列為: 1,2,3,4,5 測試序列:4,5,3,2,1 測試序列:4,3,5,1,2 題目拓展
給定入棧序列1到n,輸出所有可能的出棧序列
package com.test; import java.util.Stack; public class StackSequence { public static int number=0; static Stack<Integer> st
輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序
ack pan back 表示 return i++ ++ 輸入 gpo 1 class Solution{ 2 public: 3 bool IsPopOrder(vector<int> pushV,vector<int> popV){
給定入棧順序,輸出所有可能出棧情況及所有情況的總數
一個長度為n的無重複序列入棧的所有出棧方式 例如1、2、3這三個數字,入棧並出棧共有5種方式,分別為:321、312、231、213、123。那麼對於長度為n的無重複序列中所有的出棧方式有哪些呢? 為了設計計算的演算法,我們可以用佇列(queue)來模擬輸入,佇列的輸出則按照原先序列的順序。
給定入棧順序,求所有可能的出棧順序
先給出算所有出棧可能的個數的公式,由卡特蘭數可以得到 n = (2n!)/(n! * (n+1)!) 那麼怎麼樣得到所有的具體出棧順序呢,有兩種思路可以解決這個問題。 1.先得到入棧字串的全排列,然後根據出棧順序的規律進行篩選。 那麼篩選的條件是什麼? 舉例說明 入棧