假設我有一個非常大的文件,我想檢查括號是否平衡。我不能使用堆棧,對吧?因爲它會導致堆棧溢出。我可以使用什麼方法?檢查括號是否平衡 - 沒有堆棧
回答
一個簡單的計數器。因爲所有你正在做的是計算括號:
balance = 0
for c in open('filename.ext', 'r'):
if c == '(':
balance += 1
elif c == ')':
balance -= 1
if balance == 0:
print 'parenthesis are (possibly) balanced'
else:
print 'parenthesis are not balanced'
爲什麼(可能)?好了,有了這個方法,你會發現這個平衡:
a(bc))d(ef
這可能不是你所期望的......所以......你可能想早點打破這裏:
balance = 0
for c in open('filename.ext', 'r'):
if c == '(':
balance += 1
elif c == ')':
balance -= 1
if balance < 0:
break # -1 -> we found a closing paren without an opening one...
if balance == 0:
print 'parenthesis are balanced'
else:
print 'parenthesis are not balanced'
不夠好。 ')('is not balanced。 –
@AkiSuihkonen如果餘額在任何時候都低於0,則意味着文件不平衡,因此應該爲該文件添加支票 – SirDarius
@AkiSuihkonen,右圖,發現了...並添加了一張支票... –
的「堆棧溢出「的人通常提到與你的情況下使用堆棧(作爲數據結構)無關。
使用堆棧大多是一種合理的方式。如果你的目的就是找出
- 所有開括號有相應的關閉一個,
- 沒有的情況下,一個右括號打開括號之前發生; 在僞代碼
:
那麼你可以簡單地通過一個簡單的循環加一個計數器做
function boolean isBalanced(input) {
int counter = 0;
while (! input.hasMoreChar) {
char c = input.readNextChar();
if (c == OPEN_PARENTHESIS) {
counter++;
} else if (c == CLOSE_PARENTHESIS) {
if (counter == 0) {
return false; // Close parenthesis appear without a corresponding open
} else {
counter--;
}
}
}
return counter == 0;
}
- 1. 檢查括號的平衡,在python中使用堆棧
- 2. C平衡括號檢查器
- 3. 基本遞歸,檢查平衡括號
- 4. 平衡括號
- 5. 斯卡拉代碼來檢查括號是否平衡
- 6. 如何改進檢查括號是否平衡的程序?
- 7. 查找不平衡括號和括號
- 8. 括號檢查器實現堆棧
- 9. 平衡括號:
- 10. PInvoke的堆棧不平衡檢測
- 11. PInvoke的不平衡堆棧
- 12. AS3 - 不平衡堆棧?
- 13. 不平衡堆棧問題
- 14. 平衡表達與堆棧
- 15. PInvoke的不平衡堆棧
- 16. 括號平衡器程序
- 17. 什麼是堆棧不平衡?
- 18. PInvoke具有不平衡的堆棧
- 19. 在LaTeX中用平衡大括號替換平衡括號
- 20. Pinvoke堆棧不平衡發生,檢查Internet連接
- 21. 括號平衡與否!在C + +
- 22. 餘額檢查括號是否在使用堆棧的字符串中關閉
- 23. 檢查二叉樹是否平衡
- 24. 檢查二叉樹是否平衡
- 25. 檢查堆棧分配是否失敗?
- 26. 如何檢查堆棧是否爲空
- 27. 用C語言平衡的括號
- 28. 不平衡括號蟒蛇
- 29. 確保括號是平衡的?
- 30. 括號平衡算法
'(' == +1和 ')' 的累計總和= = -1必須始終> = 0並最終爲零。 –