百度筆試之消除表示式方括號

2021-06-18 13:24:22 字數 1475 閱讀 5246

題目大概是:

給定乙個如下格式的字串(1,(2,3),(4,(5,6),7))括號內的元素可以是數字,也可以是另乙個括號, * 請實現乙個演算法消除巢狀的括號,比如把上面的表示式變成(1,2,3,4,5,6,7), * 如果表示式有誤請報錯。

具體的**如下:

/*

* 題目:給定乙個如下格式的字串(1,(2,3),(4,(5,6),7))括號內的元素可以是數字,也可以是另乙個括號,

* 請實現乙個演算法消除巢狀的括號,比如把上面的表示式變成:(1,2,3,4,5,6,7),

* 如果表示式有誤請報錯。

* * 思路:

* 1,每當獲取字串中的乙個字元,判斷其字串。如果是數值的話,就加入新的字串中。

* 如果是逗號的話,就繼續讀取下乙個字元。

* 如果是方括號的話,繼續讀取下乙個字元。而且還有判斷其方括號是否是完全比閉合。

* 2,看到這個,讓我想起了parse類,其主要功能的是計算器,其主要的思想是採用遞迴下降的思想來實現。

* * 步驟:

* 1,逐個讀取字串,當讀取乙個字元時,判斷其是否是數值型。如果是,則把這個字元新增進去。不是的話,則跳到下乙個方法。

* 對其字元再次進行判斷,判斷是否是方括號。如果是,則跳到第乙個方法。再次讀取字元。以此類推。

/* * 方法一:

*///1,該方法是判斷其字元是否是數值,如果是則進行新增。如果不是,則跳到下乙個方法。

private void isnumber()

else

iscomma();

} private void iscomma()else

isbracket(); }

//3,該方法是判斷其字元是否是方括號,如果是,則跳轉上乙個方法。並且判斷其是否方括號是否是閉合的。

private void isbracket()else

} }

//讀取表示式下乙個字元

private void next()

//開始讀取

c += expr.charat(index);

//判斷是否是數值

if(c.matches("[0-9]"))

//判斷是否是逗號

if(",".equals(c))

//判斷是否是左括號

if(c.equals("("))

//判斷是否是右括號

if(c.equals(")"))

}}

百度2014校園招聘消除巢狀的括號

給定乙個如下格式的字串 1,2,3 4,5,6 7 括號內的元素可以是數字,也可以是另乙個括號,請實現乙個演算法消除巢狀的括號,比如把上面的表示式變成 1,2,3,4,5,6,7 如果表示式有誤請報錯。時間複雜度0 n 空間複雜度為o 1 1 include 2 int is rights char...

C語言50題之百度筆試題

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 這和我們的閱讀習慣一致。小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這...

編譯原理之消除算術表示式文法的左遞迴

現在給定如下算術表示式文法 expr expr term expr term term term term factor term factor factor factor expr number id很明顯,上訴文法中,expr和term都有左遞迴。為了消除上訴文法的左遞迴,可以將插入新的非終結符...