日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面试题整理12 求字符串括号最大深度子串

發(fā)布時(shí)間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题整理12 求字符串括号最大深度子串 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:求一個(gè)表達(dá)式字符串中括號(hào)層次最深的第一個(gè)表達(dá)式,如表達(dá)式 

"a+b+((c+d)+(e+f))",則結(jié)果為”c+d"。

分析: 一般算式會(huì)讓人想起用棧分別存儲(chǔ)操作數(shù)和符號(hào)值,但是本題目不適用,我寫(xiě)的代碼中采用了類(lèi)似于求最大連續(xù)子數(shù)組的解法,設(shè)置變量一個(gè)記錄當(dāng)前的括號(hào)深度,一個(gè)記錄最大的括號(hào)深度,從字符串頭開(kāi)始遍歷,當(dāng)遍歷到字符‘('時(shí),當(dāng)前括號(hào)深度加1,當(dāng)遍歷到字符‘)'時(shí),當(dāng)前括號(hào)深度減1,;當(dāng)當(dāng)前括號(hào)深度大于最大括號(hào)深度時(shí),將當(dāng)前括號(hào)深度賦值給最大括號(hào)深度;當(dāng)當(dāng)前括號(hào)深度小于0時(shí),將當(dāng)前括號(hào)深度置0。算法復(fù)雜度O(n)。

代碼如下:如有錯(cuò)誤,請(qǐng)大家指正。


char* FindMostDeepExpression(const char* str) {if(str == NULL)return NULL;int nLength = strlen(str);if(nLength < 2)return (char*)str;int maxDeepNum = 0;int tempDeepNum = 0;int startIndex = 0;int endIndex = nLength-1;bool isEnd = false; //標(biāo)志是結(jié)束for(int i=0; i<nLength; ++i){if(str[i] == '('){++tempDeepNum;if(tempDeepNum > maxDeepNum ){maxDeepNum = tempDeepNum;isEnd = false;startIndex = i+1;}}else if( str[i] == ')'){if( tempDeepNum == maxDeepNum && !isEnd){endIndex = i-1;isEnd = true;}-- tempDeepNum;if(tempDeepNum < 0){tempDeepNum = 0;}}}char *result = new char[endIndex-startIndex+2];strncpy(result,str+startIndex,endIndex-startIndex+1);result[endIndex-startIndex+1] = '\0';return result; } void Test(char *testName, char* str,char* expectResult) {if( testName!= NULL)printf("%s begins:\n",testName);if(expectResult != NULL)printf("expected result is %s \n",expectResult);char* result = FindMostDeepExpression(str);printf("the actual result is : %s \n",result);} void Test1() {char* str = NULL;Test("Test1",str,NULL); } void Test2() {char* str = "a+b";Test("Test2",str,"a+b"); } void Test3() {char* str = "a+b+((c+d)+(e+f))";Test("Test3",str,"c+d"); } void Test4() {char* str = "a+b+((c+d)+(e+f))";Test("Test3",str,"c+d"); } void Test5() {char* str = "a+(b+c)";Test("Test5",str,"b+c"); } int main() {Test1();Test2();Test3();Test4();system("pause"); }

總結(jié)

以上是生活随笔為你收集整理的面试题整理12 求字符串括号最大深度子串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。