有序数组去重,回文串判断,判断括号合法性

#include <iostream>
#include <vector>
#include <stack>
using namespace std;
//有序数组去重
int order(vector<int> a)
{//0-slow为去重后有序数组
    int size=a.size();
    int slow(0),fast(1);
    while(fast<size)
    {
        if(a[slow]!=a[fast])
        {
            slow++;
            a[slow]=a[fast];
        }
        fast++;
    }
    return slow+1;
}
//有序链表去重
struct Node{
    int val;
    Node* next;
    Node(int _val):val(_val),next(nullptr){}
};
Node* order(Node* head)
{
    if(head==nullptr) return head;
    Node* slow=head;
    Node* fast=head->next;
    while(fast)
    {
        if(slow->val!=fast->val)
        {
            slow->next=fast;
            slow=slow->next;
        }
        fast=fast->next;
    }
    return head;
}
//判断回文字符串
string fun(string &st,int l,int r)
{

    while (l>=0 && r<st.size() && st[l]==st[r]) {
        l--;
        r++;

    }
    return st.substr(l+1,r-l-1);
}
string huiwen(string &st)
{
    string res,s1,s2;
    for(size_t i=0;i<st.size();++i)
    {
        s1=fun(st,i,i);//奇数个数字符串
        s2=fun(st,i,i+1);//偶数个数字符串
        res=res.size()>s1.size()?res:s1;
        res=res.size()>s2.size()?res:s2;
    }
    return res;
}
//判断(){}[]合法性
char LToR(char c)
{//根据右括号返回左括号
    if(c==')') return '(';
    if(c==']') return '[';
    return '{';
}
bool kuohao(string &s)
{
    stack<char> st;
    for(size_t i=0;i<s.size();++i)
    {
        if(s[i]=='(' || s[i]=='[' || s[i]=='{')
        {
            st.push(s[i]);
        }
        else
        {
            if(!st.empty() && LToR(s[i])==st.top() )
            {
                st.pop();
            }
            else
            {
                return  false;
            }
        }
    }
    return st.empty();//栈为空,才是合法的
}
int main()
{
    cout << "Hello World!" << endl;
    vector<int> v{0,1,1,2,3,3,4};
    cout<<order(v)<<endl;
    Node* n1=new Node(0);
    Node* n2=new Node(1);
    Node* n3=new Node(1);
    Node* n4=new Node(2);
    Node* n5=new Node(3);
    Node* n6=new Node(3);
    Node* n7=new Node(4);
    n1->next=n2;
    n2->next=n3;
    n3->next=n4;
    n4->next=n5;
    n5->next=n6;
    n6->next=n7;
    Node* res=order(n1);
    while(res)
    {
        cout<<res->val<<" ";
        res=res->next;
    }
    string st="abacd";
    cout<<huiwen(st)<<endl;
    string s1="([])";

    cout<<(kuohao(s1)?"true":"false");
    return 0;
}

 

上一篇:试题 算法训练 无聊的逗


下一篇:【动态开点线段树&树链剖分】【[SDOI2014]旅行】