括號匹配問題

2021-08-29 12:30:13 字數 1851 閱讀 1196

給定乙個只包括()[]的字串,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: "()"

輸出: true

示例 2:

輸入: "(){}"

輸出: true

示例 3:

輸入: "(]"

輸出: false

示例 4:

輸入: "([)]"

輸出: false

示例 5:

輸入: ""

輸出: true

這道題用棧的思想解決問題

遇到左邊的符號入棧

遇到右邊的符號判斷棧頂元素與之是否匹配,匹配–出棧,不匹配-失敗

完成之後判斷棧是否為空,為空匹配,否則不匹配

棧的實現

typedef int stdatatype;

typedef struct stack

stack;

void stackinit(stack *ps, int n)

void stackdestory(stack *ps)

}void stackpush(stack *ps, stdatatype x)

ps->_a[ps->_top] = x;

ps->_top++;

}void stackpop(stack *ps)

}stdatatype stacktop(stack *ps)

int stacksize(stack *ps)

int stackempty(stack *ps)

括號的匹配(1)通用性不強

bool isvalid(char* s) 

//如果第乙個符號為左符號,不匹配

//")"

else if(stackempty(&ps) == 0)

else if(*s == '}')

else if(*s == ')')

else if(*s == ']')

else

return false;

s++;

}//判斷棧是否為空

if(stackempty(&ps) == 0)

return true;

else

return false;

}

括號的匹配(2)

bool isvalid(char* s) ,

,'}};

stack ps;

stackinit(&ps, 10);

while(*s!='\0')

}//是右符號,從break跳出來

if(i!=3)

continue;

//不是右符號,i = 3,是左符號,判斷是否匹配

for(i=0;ielse

return false;}}

s++;

}//判斷棧是否為空

if(stackempty(&ps) == 0)

return true;

//"("

else

return false;

}

括號匹配問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes 基本演算法思...

括號匹配問題

假設表示式中包含三種括號 圓括號 方括號和花括號,它們可以相互巢狀,如 等均為正確的格式,而等為不正確的格式。以下為演算法程式 括號匹配問題 include include int main char ch while ch getchar eof count 0 break case if cou...

括號匹配問題

問題描述 假設表示式中允許包含兩種括號 圓括號與方括號,其巢狀的順序隨意。如 或 等為正確的匹配 而 或者 或者 均為錯誤的匹配。現要求編寫程式,判斷輸入的一行括號是否是匹配的,如果是匹配的,輸出yes,否則輸出no。解題思路 檢驗括號是否是匹配的方法可以用 期待的急迫程度 這個概念來描述。例如考慮...