1. 程式人生 > 其它 >有序陣列去重,迴文串判斷,判斷括號合法性

有序陣列去重,迴文串判斷,判斷括號合法性

#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; }