我正在尝试创建一个函数,如果字符串中的左括号和右括号的数量相等,它将返回true。如果他们不是,我需要它返回虚假。目前这不适用于所有字符串。例如,paren_parity('p)(()ld))()(eog((h)k(j(m()(nc)fab)i)',)
返回true,但paren_parity('d)p))mk)bc))j((eif(()ln)o)h((ag',)
返回True,即使开括号和闭括号的数量不同。
def paren_parity(z):
stack = []
pushChars, popChars = "<({[", ">)}]"
for c in z :
if c in pushChars :
stack.append(c)
elif c in popChars :
if not len(stack) :
return False
else :
stackTop = stack.pop()
balancingBracket = pushChars[popChars.index(c)]
if stackTop != balancingBracket:
return False
else :
return True
return not len(stack)
答案 0 :(得分:2)
你有几个选择。第一个非常简单,只计算开放数量并关闭并检查相等性:
</head>
<body>
<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="gen" id="gen">
<option value="">Gender</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<input type="submit" name="submit" value="Search">
</form>
</body>
</html>
<?php
if (isset($_GET['submit'])) {
//////////// $gen = (!empty($_GET['gen']) ? trim($_GET['gen']) : '');
try {
$dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', $databasehost, $dbname);
$database_handler = new PDO($dsn, $dbuser, $dbpass, array(
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
$statement = $database_handler->prepare("
SELECT * FROM sex WHERE type = :gen;
");
$statement->bindParam(':gen', $gen, PDO::PARAM_INT);
$statement->execute();
if ($statememt->rowCount() > 0){
echo '<table>';
echo '<tr>';
echo '<th>Gender</th>';
echo '</tr>';
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td>" . $row['gen'] . "</td>";
echo "</tr>";
}
echo '</table>';
}
else {
echo ' Please refine your search';
}
}
catch (PDOException $e) {
print "Error: " . $e->getMessage();
}
}
?>
但是,这会传递您可能不想要的def paren_parity(z):
return z.count('(') == z.count(')')
之类的字符串。否则,您可以在遍历字符串时保持打开的数量的计数。如果计数变为负值,则返回'))))(((('
:
False
当然,这仍然无法解析编程语言文本,因为它会因def paren_parity(z):
open_count = 0
for c in z:
if c == '(':
open_count += 1
if c == ')':
open_count -= 1
if open_count < 0:
return False
return open_count == 0
之类的问题而失败(因为我在字符串中嵌入了一个括号)。但是,我将假设这不是您当前问题的问题; - )。
答案 1 :(得分:2)
这是你的问题:
else :
return True
如果您遇到的问题不是括号,请务必返回True
。因此,只要您点击d(
,True
就会返回d
。
您可以通过删除这些行来修复它。
答案 2 :(得分:-1)
使用尾递归函数可以很容易地解决这个问题,包括确定是否存在“不匹配”。
git config --system --edit
WARNING: These git config values clash:
git config "http.sslcainfo" = "C:/Users/foo/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt"
git config "http.sslcainfo" = "/ssl/certs/ca-bundle.crt"
充当你正在推动和弹出的堆栈。既然你不关心这个值,只要它是push还是pop,持有一个整数就足够了。