1. 程式人生 > >給定入棧序列判斷給定出棧序列是否合法(Exercise1_3_45,java)

給定入棧序列判斷給定出棧序列是否合法(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_45java)

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.先得到入棧字串的全排列,然後根據出棧順序的規律進行篩選。 那麼篩選的條件是什麼? 舉例說明 入棧