演算法資料結構面試分享(四)括號匹配問題

2021-08-17 02:04:44 字數 1489 閱讀 9371

今天在帖子上看見有同學在問,如果乙個字串中包含大括號和小括號,我們該如何解決括號匹配問題。我們今天就一起看下這道題吧。按照我們之前的套路,按部就班來:

一、確保我們理解了問題,並且嘗試乙個例子,確認理解無誤。

舉個例子,這樣的括號是匹配的, ()、{}、({}), ((){}), 而類似於(){}), 最後乙個)匹配的是第乙個(, 倒數乙個}匹配的是倒數第三個。所以我們可以從尾往頭掃瞄,第乙個)我們先記錄下來,第乙個}我們記錄下來,第三個是匹配的,消除掉,第四個是),我們儲存下來,第五個是(,我們發現和第四個匹配,消除掉,依次類推,到最後乙個(,我們發現它還最開始的第乙個匹配。所以我們自然想到了棧,不匹配我們就入棧,匹配我們就出棧。

三、 解釋你的演算法和實現的方法

我們申明兩個棧,首先將所有字元依次入棧,再逐個出棧,出棧時,我們看下輔助棧裡的第乙個字元是否匹配,若匹配我們出棧,否則入棧。當主棧裡所有字元都出棧時,我們檢查輔助棧是否為空。空表示完全匹配,否則不匹配。

四、寫**的時候,記住,一定要解釋你現在在幹什麼 

我們先來定義乙個棧,一般我們會借助於陣列,這裡我們就簡單的用列表來處理了,實現它的pop, push, isempty 方法,看**:

public class mystack

public mystack(t input)}}

public t pop()

throw new indexoutofrangeexception("the stack is empty already.");

}public void push(t element)

public bool isempty()

}

接下來,我們看演算法:

public static bool ismatch(string input)

else}}

return secondstack.isempty();

}return false;

}

這中間使用了乙個isclosed方法,我們用來匹配 ( 和 ), , 看**:

private static bool isclosed(char first, char second)

';return false;

}

最後我們一起來測試這個方法:

static void main(string args)

})";

var result = ismatch(input);

console.writeline(result);

}

, 資料結構與演算法

和微軟經典演算法面試題輔導

資料結構 括號匹配

三種括號形式 輸入一段字串,判斷其括號是否匹配。如下 括號匹配問題 include include include define stack init size 100 define stackincrement 10 define error 0 define true 1 define fals...

資料結構 括號匹配

利用棧來實現字串的左右括號匹配 思路 對於字串遍歷 左括號字元入棧 遇到右括號字元就從棧頂彈出原素 彈出和右括號進行匹配 如果匹配成功繼續 匹配不成果報錯 注意 入棧的是字串的位址 不能說會變的臨時變數 接字串時需要用char 型別去接 並且進行強制型別轉換 匹配的時候再用 out表示彈出元素取位址...

演算法(資料結構)

空間不夠儲存 給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 40億個數空間儲存的問題 利用對映 分析 unsigned 範圍是2 32 40億大約大約4g個數不到,常規方法肯定是不行的 我們你可以利用 伴隨陣列 那種思想利用記...