Dada uma string que inclui apenas '(', ')', '{', '}', '[', ']', julgue se a string é válida.
Uma string válida deve satisfazer: o
parêntese esquerdo deve ser fechado com o mesmo tipo de parêntese direito.
O parêntese de abertura deve ser fechado na ordem correta.
Observe que uma string vazia pode ser considerada uma string válida.
Exemplo 1:
Entrada: "()"
Saída: verdadeiro
Exemplo 2:
Entrada: “() [] {}”
Saída: verdadeiro
Exemplo 3:
Entrada: "(]"
Saída: falso
Exemplo 4:
Entrada: "([)]"
Saída: falso
Exemplo 5:
Entrada: "{[]}"
Saída: verdadeiro
1. Solução: Coloque a string na pilha, todos os colchetes esquerdos estão na estação, o marcador cnt é adicionado 1 e, em seguida, todos os colchetes esquerdos correspondentes ao colchete direito atual são retirados da pilha, e o marcador cnt é reduzido em um; Após a conclusão, julgue se cnt é zero, se cnt = 0, os parênteses são combinados, caso contrário, eles não são correspondidos.
O código principal é o seguinte:
//DoValid.cpp
bool DoValid(string& str) {
string tmp;
int cnt = 0;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '{' || str[i] == '[' || str[i] == '(') {
tmp.push_back(str[i]);
cnt++;
}
else if (cnt != 0 && (tmp[cnt - 1] + 1 == str[i] || tmp[cnt - 1] + 2 == str[i])) {
tmp.pop_back();
cnt--;
}
else
return false;
}
if (cnt != 0)
return false;
else
return true;
}
class Solution {
public:
bool isValid(string s) {
return DoValid(s);
}
};
2.
Fonte das observações : LeetCode Número da pergunta: 20
Link: LeetCode Effective Bracket No20