原題目
括號匹配判斷
問題描述:
檢查字串表示式中的括號是否匹配;
左括號數目同有括號數目不相等即為不匹配;
去除多餘的左括號或者右括號,優先保留先出現的括號;
匹配後去除無效的括號:如:((表示式)) 應為(表示式);
只考慮小括號,不考慮先出現右括號的情況;
要求實現函式: (字串最長長度為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怎麼辦?抱著學習的態度一頁一頁往下翻,好多...