給出我的華為的一道面試題演算法

2021-05-08 10:02:15 字數 921 閱讀 4433

原題目

括號匹配判斷

問題描述:

檢查字串表示式中的括號是否匹配;

左括號數目同有括號數目不相等即為不匹配;

去除多餘的左括號或者右括號,優先保留先出現的括號;

匹配後去除無效的括號:如:((表示式)) 應為(表示式);

只考慮小括號,不考慮先出現右括號的情況;

要求實現函式: (字串最長長度為60;表示式正確性不需要考慮)

void bracket(char* src, char* dst);

如果匹配則通過dst輸出原串;

如果不匹配則根據要求去處多於括號後通過dst輸出匹配後的串;

示例 輸入:12+(345*25-34)  輸出:12+(345*25-34)

輸入:12+(345*(25-34)  輸出: 12+(345*25-34)

輸入:(12+345)*25)-34  輸出: (12+345)*25-34

輸入:(543+(256-43)*203))+24

輸出:(543+(256-43)*203)+24

輸入:((1+2)*((34-2))+((2*8-1)

輸出:((1+2)*(34-2)+2*8-1)

void bracket(char* src, char* dst);只能在這個函式中實現,不允許用棧。不允許另寫函式並加以呼叫。src是輸入的字串,dst是輸出的字串!

演算法描述:

第一步:

掃瞄字串中出現(,)的位置記錄到array陣列

第二步:

array陣列分成兩組,a組是(出現的位置, b組是)出現的位置

第三步:

遍歷b組中的元素,每次遍歷將b[n]在a組中比較,若b[n]>a[k] && b[n]第四步:

此時a組和b組中是多餘的(和)位置,拼接陣列

華為的一道面試題

通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2 壓縮欄位的格式為 字元重複的次數 字元 例如 字串 yyy...

華為的一道面試題的解答

題目 int a nsize 其中隱藏著若干 0,其餘非 0整數,寫乙個函式 int func int a,int nsize 使a 把0移至後面,非 0整數移至 陣列前面並保持有序,返回值為原資料中第乙個元素為 0的下標。盡可能不使用輔助空間且考慮效率及異常問題,注釋規範且給出設計思路 程式如下 ...

揹包演算法解決一道華為面試題

有兩個陣列a,b,大小都為n,陣列元素的值任意,無序 要求 通過交換a,b中的元素,使陣列a元素的和與陣列b元素的和之間的差最小 是這個。估計多數人想到的都是先sort,再交叉,或者一條龍什麼的,包括我。後來一想不對啊,如果前面的都是個位數,最後乙個是999怎麼辦?抱著學習的態度一頁一頁往下翻,好多...