class minstack
{
public $m_data;
public $m_min;
function minstack(){
$this->m_data=new stack();
$this->min=new stack();
}
public function push($value){
if($this->m_min->isempty()||$this->m_min->top()>$value)
$this->m_min->push($value);
$this->m_min->push($this->m_min->top());
}
public function pop(){
if($this->m_data->isempty()||$this->m_min->isempty()) return -1;
$this->m_min->pop();
$this->m_data->pop();
}
public function min(){
if($this->m_data->isempty()) return -1;
return $this->m_min->top();
}
}
class minstack
{
public $m_data;
public $m_min;
function minstack(){
$this->m_data=new stack();
$this->min=new stack();
}
public function push($value){
if($this->m_min->isempty()||$this->m_min->top()>$value)
$this->m_min->push($value);
$this->m_min->push($this->m_min->top());
}
public function pop(){
if($this->m_data->isempty()||$this->m_min->isempty()) return -1;
$this->m_min->pop();
$this->m_data->pop();
}
public function min(){
if($this->m_data->isempty()) return -1;
return $this->m_min->top();
}
}
维护一个辅助栈,当栈顶的元素不等于出栈的元素时,将元素压栈;当等于时出栈
function isTan($arr,$brr)
{
if(false===is_array($arr)||false===is_array($brr)) return false;
$n=count($arr);
$m=count($brr);
if($n==0||$m==0||$n!=$m) return false;
$stack=new Stack();
for($i=0,$j=0;$j<$n;){
while($i<$n&&($stack->isEmpty()||$stack->getTop()!=$brr[$j])) {
$stack->push($arr[$i]);
$i++;
}
if($i>=$n&&($stack->getTop()!=$brr[$j])) {
return false;
}
if($stack->getTop()==$brr[$j]){
$j++;
$stack->pop();
}
}
return true;
}
4.1 栈
4.1.1 Valid Parentheses
描述
Given a string containing just the characters ’(’, ’)’, ’{’, ’}’, ’[’ and ’]’, determine if the input string is valid.
the brackets must close in the correct order, ”()” and ”()[]” are all valid but ”(]” and ”([)]” are
not.
function isValid($str)
{
$left=array('('=>')','{'=>'}','['=>']');
$n=strlen($str);
$arr=array();
for($i=0;$i<$n;$i++){
if(array_key_exists($str[$i],$left))
$arr[]=$left[$str[$i]];
else{
if(count($arr)==0||$str[$i]!=array_pop($arr))
return false;
}
}
return true;
}
4.1.2 Longest Valid Parentheses
描述
Given a string containing just the characters ’(’ and ’)’, find the length of the longest valid (wellformed)
parentheses substring.
For ”(()”, the longest valid parentheses substring is ”()”, which has length = 2.
Another example is ”)()())”, where the longest valid parentheses substring is ”()()”, which has
length = 4.
描述
Given a string containing just the characters ’(’ and ’)’, find the length of the longest valid (wellformed)
parentheses substring.
For ”(()”, the longest valid parentheses substring is ”()”, which has length = 2.
Another example is ”)()())”, where the longest valid parentheses substring is ”()()”, which has
length = 4.