题意
描述
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解题
代码实现
class Solution {
/**
* @param String $s
* @return Boolean
*/
function isValid($s) {
if (empty($s)) {
return true;
}
$arr = array(
"(" => ")",
"{" => "}",
"[" => "]",
);
$end = [];
for ($i = 0; $i < strlen($s); $i++) {
if (isset($arr[$s[$i]])) {
$end[] = $arr[$s[$i]];
} elseif (end($end) == $s[$i]){
array_pop($end);
} else {
return false;
}
}
return count($end) === 0;
}
}
解题思路
如果属于左侧括号,则向数组end中插入对应的右侧括号;如果属于右侧括号则查找end数组中是否有一样的,如果有则删去
类似于用栈实现
还不快抢沙发