括號匹配問題與經典筆試面試題目解析

2021-12-29 16:25:47 字數 1897 閱讀 8160

一、括號匹配問題

程式語言是用來編寫程式的工具。計算機硬體可以識別的語言是機器語言,通常人們編寫的電腦程式所用的高階語言必須被轉換成機器語言才可以被計算機理解。將高階語言編寫的源程式翻譯為等價的計算機可以理解的程式的過程稱為編譯,而實現編譯功能的程式稱為編譯程式。編譯程式是計算機中非常複雜的一種系統程式。在通常的整合開發環境中都,編譯程式都是最精細、最複雜、也最重要的部分。

乙個典型的編譯程式一般都含有八個部分,即詞法分析、語法分析、語義分析、中間**生成、**優化程式、目標**生成、錯誤檢查和處理以及各種資訊**的管理。它們相互協同配合完成編譯任務。其中在語法分析階段,語法分析程式以詞法分析程式所輸出的用內部編碼格式表示的單詞序列作為輸入,其任務是分析源程式的結構,判斷它是否為相應程式語言中的乙個合法程式,即判定程式的合法性。

本題要求編寫乙個程式,該程式能夠對輸入的一段字串進行括號匹配檢查。若語句中左括號與右括號的數目相等,且能夠完整地匹配成對,即表示本語句不存在括號匹配上的錯誤,此時輸出「ok!」字樣。否則表示語句中存在語法錯誤,程式輸出「wrong!」字樣。顯然,這是用「棧」這種資料結構來解決的一道典型問題。它的特點可以簡單的概括為「後進先出」。如果把握住了這一特點,那麼就是抓住了解題的關鍵。

下面幾條語句是存在括號匹配錯誤的例子:

下面幾條語句是不存在括號匹配錯誤的例子:

(a)((b)((c)(d)))

下面給出程式實現的源**。

#include "stdafx.h"

#include

#include "linkstack.h"

using namespace std;

int _tmain(int argc, _tchar* ar**)

if(small.isempty()),但利用棧結構來解決仍然是非常容易的。而且,儘管題目沒有明確地表明,但我們應該知道類似這樣的形式也是正確的括號匹配模式。示例**如下:

class solution ' && s[i] != ']')

charstack.push(s[i]);

else'))

return false;

}i++;

}

if (charstack.size() == 0)

return true;

else return false; }};

leetcode中另外還提供了一道與此類似的變型題,我們應當舉一反三,趁熱打鐵,一舉攻克所有該型別的題目。如下,此時我們不再要求判定輸入字串的括號匹配是否正確,而是要檢測其中最長的匹配系列的長度。

從leetcode上所給的提示(圖中紅框標出)可以看出,該題需要用到動態規劃策略來解決。而且leetcode給出的題目難度等級為hard。事實上,leetcode上所有涉及動態規劃的問題都是hard級別的!但是,如果我們有捷徑,當然不必墨守成規。這道題其實有個非常輕巧的解決辦法,用乙個bool陣列來標記已經匹配過的字元,找到最長的連續標記的長度就是所求的結果。採用該種方法,我們只要遍歷兩遍陣列即可,時間複雜度為o(n)。而採用動態規劃演算法,複雜度則是o(n^2)。既然我們的方法更易於實現(和理解),複雜度又更低,何樂而不為?下面是示例**。

class solution

i++;

}

int max_len = 0, cur_len = 0;

i = 0;

while(i != s.length())

return max_len;}};

需要說明的是,我們使用了乙個vector來儲存bool陣列。如果你用new來動態生成乙個陣列,因為陣列訪問是基於指標的,所以程式的執行效率會進一步提公升,但是注意別忘了用delete來釋放記憶體。

微軟筆試面試題目

智力題 1 燒一根不均勻的繩子,從頭燒到尾總共需要1個小時,問如何用燒繩子的方法來確定半小時的時間呢?2 10個海盜搶到了100顆寶石,每一顆都一樣大小且價值連城。他們決定這麼分 1 抽籤決定自己的號碼 1 10 2 首先,由1號提出分配方案,然後大家表決,當且僅當超過半數的人同意時,按照他的方案進...

筆試面試題目1

1.求重合段的長度 size t foo unsigned int a1,size t al1,unsigned int a2,size t al2 其中a1和a2都為無符號陣列,al1和al2為陣列的長度,陣列的長度為偶數。無符號陣列由一對數字區間組成。如下例 a1 為 0,1,3,6,10,20...

筆試面試題目8

1.寫乙個 string類,以及建構函式能是虛函式嗎?class string string char str null 建構函式 string int len,char ch string 析構函式 string string str 複製建構函式 int size 獲得字串長度 string o...