1. 程式人生 > >有效的括號(leet簡單篇第二十題)

有效的括號(leet簡單篇第二十題)

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; }```