C#
public static bool IsValid(string s)
{
List<char> left_list = new List<char>() { '(', '{', '[' };
List<char> right_list = new List<char>() { ')', '}', ']' };
if (!left_list.Contains(s[0]))
{
return false;
}
if (s.Length%2 !=0)
{
return false;
}
int target = 0;
int index = 0;
List<char> next_list = new List<char>();
foreach (char item in s)
{
index = 0;
if (target<=1 || left_list.Contains(item))
{
if (!left_list.Contains(item))
{
return false;
}
index = left_list.IndexOf(item);
next_list.Add(right_list[index]);
target = 2;
}
else
{
if (item ==next_list.Last())
{
next_list.RemoveAt(next_list.Count - 1);
}
else
{
return false;
}
if (next_list.Count <= 0)
{
target = 1;
}
}
}
if (next_list.Count>0)
{
return false;
}
return true;
}
python2:
def isValid(s):
left_list = ['(', '{', '[']
right_list = [')', '}', ']']
if not left_list.__contains__(s[0]):
return False
if not (len(s) % 2) == 0:
return False
target = 0
next_list = []
for ss in s:
if target <= 1:
if not left_list.__contains__(ss):
return False
index = left_list.index(ss)
next_list.append(right_list[index])
target = 2
else:
if left_list.__contains__(ss):
index = left_list.index(ss)
next_list.append(right_list[index])
target = 2
elif ss == next_list[-1]:
next_list.pop()
else:
return False
if len(next_list) <= 0:
target = 1
if len(next_list) > 0:
return False
return True