有效的括號(leet簡單篇第二十題)
阿新 • • 發佈:2018-11-23
ps:因為筆者也是個剛接觸程式語言的菜鳥,所以這裡的文章都是拿c語言寫的,如果同學們想拿其他語言可以在讀懂原理之後用其他語言書寫
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: “()”
輸出: true
示例 2:
輸入: “()[]{}”
輸出: true
示例 3:
輸入: “(]”
輸出: false
示例 4:
輸入: “([)]”
輸出: false
示例 5:
輸入: “{[]}”
輸出: true
筆者在拿到這道題時還是有一點無從下手,之前我只寫過有效的大括號,如果遇到“{”就count++;如果遇到“}”count不為1就返回錯誤。看了有的大佬的部落格後領悟了可以用棧的思量遇到“{”就讓他入棧,遇到"}"就讓他們出棧,如果結束時棧中不為空說明有括號沒匹配,這裡大家一定得知道出棧的括號一定是相連的。程式碼如下
bool isValid(char* s)
{
int len = strlen(s);
int pos = 0;
int i = 0;
char * arry = (char*)malloc(len*sizeof(int));
for(i = 0; i < len; i++)
{
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
{
arry[pos++] = s[i];
}
if(s[i] == '}')
{
if(arry[pos - 1] == '{')
{
pos--;
}
else
return false;
}
if(s[i] == ')')
{
if(arry[pos - 1 ] == '(')
{
pos--;
}
else
return false;
}
if(s[i] == ']')
{
if(arry[pos - 1] == '[')
{
pos--;
}
else
return false;
}
}
if(pos != 0) return false;
return true;
}```