小代码 栈之合法性一点思路 不一样的际遇

/************
1 2 3 4 如栈
出栈 
3 2 4 1 返回0
错误 3 1 2 4 返回-1
**********/
#include<iostream>
#include<stack>
#include<string.h>

using namespace std;

bool judge(const char *push_seq, const char *pop_seq)
{
    if (NULL == push_seq || NULL == pop_seq)
    {
        return false;         
    }
    if (strlen(push_seq) != strlen(pop_seq))
    {
        return false;
    }
   
    stack<char>sc;
    while (*push_seq)
    {
        if (0 == sc.size() || sc.top() != *pop_seq)
        { 
            sc.push(*push_seq++); //
        }
        else
        { 
            sc.pop();
            ++pop_seq; //
        }
    }
    while (sc.size())
    {
        if (sc.top() != *pop_seq++)
        {
            return false;
        }
        sc.pop();
    }
    
    return true;
}  
int mycheck1(int a[],int n)
{
    stack<int>s;
    int i,j,k=1;          // 3 2 4 1
    for(i=0;i<n;i++)
    {
        if(a[i]>k)
          { for(j=k;j<a[i];j++) s.push(j);
                k=j+1;cout<<k<<endl;
              continue;
             }
       
        if(a[i]==s.top()){s.pop();continue;}
        if(a[i]<s.top()) return -1;
    }
    cout<<endl;
    return 0;
}

int mycheck(int a[],int n)
{
    stack<int>s;      s.push(0);
    int i,j,k=1;         //BUG段  经过分析 在于s.top段  因为没有元素时这样做有越界的含义
    for(i=0;i<n;i++)
    {
        if(a[i]>k)
          { for(j=k;j<a[i];j++) s.push(j);
                k=j+1;cout<<k<<endl;
              continue;
             }
       
        if(a[i]==s.top()){s.pop();continue;}
        if(a[i]<s.top()) return -1;
    }
    cout<<endl;
    return 0;
}
int main()
{
     //cout<<judge("1234","3241")<<endl;
     //int a[]={1,2,3,4};  
int a[]={3,2,4,1};
// int a[]={4,3,2,1};ok
      cout<<mycheck(a,4);

     
    return 0;
}
时间: 2024-10-06 01:27:49

小代码 栈之合法性一点思路 不一样的际遇的相关文章

小代码 栈的简单实现

/*****************************              WZ ASUST 2016           *****************************/  #include <iostream>   using namespace std; const int StackSize=10;   template <class T>         class SeqStack { public:     SeqStack( ) ;     

JavaScript自己模仿jQuery的一点小代码

function seter(sId) {    var obj = document.getElementById(sId);    return new function () {        var objN = obj;        this.html = function (sHtml) {            objN.innerHTML = sHtml;        };    };} 这样的代码有怎样的作用呢? 假如HTML代码中有如下的内容: <div id="S

iOS开发中一些有用的小代码

1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@&qu

进栈出栈的合法性检查

栈与进栈出栈 栈:是限定在栈表尾进行插入或删除的线性表,又称为后进先出(LIFO)的线性表,这个特点可以形象的表示为--(铁路调度站) 只要保证每次在栈顶操作,同一进栈顺序可以有不同的出栈顺序,以下是部分出栈顺序 34521   25431  14532 32145    43215 那么究竟怎样验证一个出栈序列与一个入栈序列匹配? 思路:将进栈和出栈序列分别存在数组里,然后再创建一个辅助栈,把输入序列中的元素依次压入栈中,并按照出栈序列依次弹出. 将进栈和出栈序列存在两个数组里,然后再创建一个

判断栈的出栈顺序合法性

栈的出栈顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入栈,每个元素的出栈时机不定.题目给定一个出栈顺序,我们来判断这个出栈顺序有没有可能发生. 比如对[1,2,3,4,5,6,7,8,9]: [1,2,3,4,5,6,7,8,9]是一个合法出栈序列 [9,8,7,6,5,4,3,2,1]也是一个合法序列 [4,5,3,2,7,6,1,8,9]也是一个合法序列 [3,4,5,1,2,9,8,7,6]就是一个非法序列 判断方法有两种,一种是对每一个值,其后所有小于它的值的数是一个降

Arduino 开关控制小灯持续亮之具体思路

Arduino 开关控制小灯持续亮之具体思路 为什么写这篇文章: 我们用开关控制灯的亮灭的时候,希望只需要按一下按键就可以做到灯一直亮着.而在<Arduino魔法书>中--有弹性的按键这一节主要讲了消除抖动函数,但是没有讲这个程序的原理. 书中的代码如下 const int LED = 9; const int BUTTON = 2; boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = false; vo

【processing】小代码

今天无意间发现的processing 很有兴趣 实现很简洁 void setup(){ } void draw(){ background(255); if(mouseX < width/2 && mouseY > height/2) { fill(0); rect(0,height/2,width/2,height/2); } } 这个小小的代码可以实现 当鼠标位于画布左下方时显示一个黑色的框 -----------------------------------------

Js 常用小代码

//判断一个汉子等于两个字符 function getByteLen(val) { var len = 0; for (var i = 0; i < val.length; i++) { var a = val.charAt(i); if (a.match(/[^\x00-\xff]/ig) != null) { len += 2; } else { len += 1; } } return len; } Js 常用小代码

小代码 &nbsp; 密码转置 **级 &nbsp; &nbsp; 复习aito ASCII 码值

/**************** WZ  ASUST  2016 写小代码 就是练习小心吧 *****************/ int main() { int x=1,i,j,k; char s;char ss[20]="zZ+_+_+{}{}{}"; cout<<"start:"<<ss<<endl; for(i=0;i<strlen(ss);i++) { if((ss[i]>64&&ss[i]