假设我有一个字符串“(支付)+ (8个工作小时)+(公司规则)”。现在我想检查这个完整的字符串是否用括号括起来。基本上我想检查字符串是不是这样:“((支付)+ (8个工作小时)+(公司规则))”。如果它已经用括号括起来了,那么我会让它保持原样,否则我会对完整的字符串应用括号,这样输出就是:“((支付)+ (8个工作小时)+(公司规则))”。通过计算括号的数量,我不能解决这个问题。
有没有人能提出一个解决方案?
发布于 2013-03-01 16:37:49
Stack是一个好主意,但是如果您想查看完整的字符串是否用括号括起来,我建议您将遇到的开头paren的索引放在Stack上。这样,每次在堆栈上弹出一个项目时,都会检查它是否为0,这意味着对应于这个结束paren的开始paren位于字符串的开头。最后一个结束语paren的检查结果将告诉您是否需要添加括号。
示例:
String s = "((paid for) + (8 working hours) + (company rules))";
var stack = new Stack<int>();
bool isSurroundedByParens = false;
for (int i = 0; i < s.Length; i++) {
switch (s[i]) {
case '(':
stack.Push(i);
isSurroundedByParens = false;
break;
case ')':
int index = stack.Any() ? stack.Pop() : -1;
isSurroundedByParens = (index == 0);
break;
default:
isSurroundedByParens = false;
break;
}
}
if (!isSurroundedByParens) {
// surround with parens
}发布于 2013-03-01 16:34:00
使用堆栈..就像当你找到一个(括号,按下它,当你看到它时)弹出堆栈..最后,当字符串完全解析时,堆栈应该是空的……这将确保您的括号不会丢失。
在您的示例中,如果在堆栈之间为空,则整个字符串没有括号
例如:对于输入字符串:
(付费)+ (8个工作小时)+(公司规定)
第一个(将被推送,当它遇到时)将弹出堆栈,现在检查是否有更多的字符串需要解析,并且堆栈不为空。如果stack为空,则表示整个字符串不在括号中。
而对于字符串:
((付费)+ (8个工作小时)+(公司规定))
在最后一个)出现之前,堆栈不会为空。
希望这能帮到你。
发布于 2019-07-10 20:58:29
查找右括号索引
public int FindClosingBracketIndex(string text, char openedBracket = '{', char closedBracket = '}')
{
int index = text.IndexOf(openedBracket);
int bracketCount = 1;
var textArray = text.ToCharArray();
for (int i = index + 1; i < textArray.Length; i++)
{
if (textArray[i] == openedBracket)
{
bracketCount++;
}
else if (textArray[i] == closedBracket)
{
bracketCount--;
}
if (bracketCount == 0)
{
index = i;
break;
}
}
return index;
}https://stackoverflow.com/questions/15153533
复制相似问题