我有以下算法,而不是检查字符串是否平衡
bool IsBalanced(string input)
{
int count = 0;
for (int i = 0; i < input.size(); i++)
{
if (input[i] == '(') count++;
if (input[i] == ')') count--;
if (count < 0) return false;
}
if (count == 0) return true;
return false;
}
如何使用此方法检查vector<string>
是否平衡?
vector<string> VectorOfBalanced(vector<string> values)
{
}
示例输入:
values = { "{}[]()", "{[}]}" }
示例输出
return = { "YES", "NO" }`
答案 0 :(得分:3)
如何使用此方法检查向量是否平衡?
你可以使用常规for循环,但在c ++中我们有更多通用算法,如std :: transform。
我认为你的问题不是IsBalanced是否正确,而是如何将它应用于字符串向量。
vector<string> res;
std::transform(
values.begin(), values.end(),
std::back_inserter(res),
[](auto& s) -> auto { return IsBalanced(s) ? "Yes" : "No"; });
答案 1 :(得分:2)
你的问题是两个部分:如何检查字符串是否与多组开/关字符相平衡,例如&#34;()&#34;,&#34; {}&#34 ;和&#34; []&#34;,然后如何将其扩展为字符串向量。
后一部分很简单:只需为向量中的每个字符串重复算法。
对于前一部分,您需要以某种堆栈的形式跟踪所有未完成的开头字符的列表。 std::vector<char>
将是一个很好的选择:
您应该可以将上述内容简单地翻译成C ++代码。
答案 2 :(得分:0)
这是一个指导路径,而不是一个实际答案。您需要查找std::stack
,这样做的简单方法是每次看到一个开放的{ [ (
YourStackName.push()
时,YourStackName.pop()
一旦看到一个封闭的那个,你就会YourStackName.Empty()
TableHeaderCell header1 = new TableHeaderCell();
LiteralControl literal = new LiteralControl();
literal.Text = "Destination";
header1.Controls.Add(literal);
header1.Controls.Add(reqF);
tRow0.Cells.Add(header1);
1}}。但是你需要保持你的逻辑(如果它是空的,不要拉,要推送哪个字符,三种类型可能有三个堆栈等等)
所以最后,你只是检查Literal
是否是{,1},那么它是平衡的!