LeetCode.20有效的括号
题目
代码
public class Solution
{
public bool IsValid(string s)
{
if (s.Length == 0)
return true;
else if (s.Length % 2 != 0)
return false;
else
{
int i;
for (i = 0; i < s.Length; )
{
if (s[i] == '[' || s[i] == '{' || s[i] == '(')
{
if (s[i] == '[' && s[i + 1] == ']')
continue;
else if (s[i] == '{' && s[i + 1] == '}')
continue;
else if (s[i] == '(' && s[i + 1] == ')')
continue;
else
return false;
}
i += 2;
}
return true;
}
}
}
可能由于循环和判断太多,导致超出时间限制。
如果括号都是成对的话,那么必有至少一组成对的括号是连在一起的,因此我们可以依次找到这些成对的括号然后删除,如果最后字符串里没有了元素,说明括号都是成对出现的。
public class Solution
{
public bool IsValid(string s)
{
if (s.Length == 0)
return true;
else if (s.Length % 2 != 0)
return false;
else
{
int i = 0;
int index = -1;
int len = s.Length;
for (; i < len;)
{
if (s.IndexOf("()") != -1)
{
index = s.IndexOf("()");
s = s.Remove(index,2);
}
else if (s.IndexOf("[]") != -1)
{
index = s.IndexOf("[]");
s = s.Remove(index, 2);
}
else if (s.IndexOf("{}") != -1)
{
index = s.IndexOf("{}");
s = s.Remove(index, 2);
}
else
return false;
len -= 2;
i = 0;
}
return true;
}
}
}