括号匹配

来源:互联网 发布:java垃圾自动回收 编辑:程序博客网 时间:2024/05/22 08:48

一、括号匹配:

1.1 问题描述:

给定一串小括号系列"((())())(()(()))",判断其是否是恰好匹配的。如"(())()"是恰好匹配的,但")()"、"()("、"(()"等不是恰好匹配的。

1.2 问题解决:

用栈结构解决。设栈arr,初始为空,对小括号系列str(1~n):若str(i)为'(',则将str(i)入栈arr,然后判断str(i+1);若str(i)为')'且arr非空,则将arr栈顶元素弹出,然后判断str(i+1);若str(i)为')'且arr为空,则小括号系列str不是恰好匹配;若对str(n)进行判断后栈arr不为空,则小括号系列str不是恰好匹配。

1.3 代码实现:

bool parenthesis_match(char *str){if(str==NULL||strlen(str)<1){return true;}else if(*str==')'){return false;}char *arr=new char[strlen(str)+1];if(arr==NULL){exit(0);}int i=-1;arr[++i]=*str++;while(*str!='\0'){if(*str=='('){arr[++i]=*str++;}else if(i>-1){--i;++str;}else{break;}}delete[] arr;if(*str!='\0'||i>-1){return false;}else{return true;}}

二、整数处理:

2.1 问题描述:

给定一组互不相等的整数序列,将该整数序列降序输出,且不能出现连续子序列。若连续出现连续子序列,则只输出该连续子序列首尾两个数。如"1 2 3 5 6 7 8 12 11 9 13",则输出为"13 11 9 5 3 1"。

2.2 问题分析:

将整数序列按降序排列,然后在输出是处理连续子序列。

2.3 代码实现:

int discontinuous_integer_sort(char *str,int *arr){//str:input string//arr:array to store the final sorted integer//return value:the sorted integer sequence lengthif(str==NULL||arr==NULL||strlen(str)<1){printf("discontinuous_integer_sort: invalid arguments\n");return -1;}int i,j,k,temp;i=0,temp=0;while(true){if(*str<='9'&&*str>='0'){temp*=10;temp+=*str++-'0';}else{j=i-1;while(j>=0){if(arr[j]<temp){arr[j+1]=arr[j];--j;}else{break;}}arr[j+1]=temp;temp=0;++i;if(*str++=='\0'){break;}}}return i;}void print_discontinuous_integer(int *arr,int n){if(arr==NULL||n<1){printf("print_discontinuous_integer: invalid arguments\n");return;}printf("%d",arr[0]);for(int i=1;i<n;++i){if(arr[i-1]-1==arr[i]&&i+1<n&&arr[i]-1==arr[i+1]){continue;}else{printf(",%d",arr[i]);}}printf("\n");}

三、测试代码:

#include<cstdio>#include<cstdlib>#include<cstring>int discontinuous_integer_sort(char *str,int *arr);void print_discontinuous_integer(int *arr,int n);bool parenthesis_match(char *str);int main(int argc,char *argv[]){char str1[101];int arr[101];int len;gets(str1);len=discontinuous_integer_sort(str1,arr);print_discontinuous_integer(arr,len);char str2[101];gets(str2);if(parenthesis_match(str2)){printf("Yes\n");}else{printf("No\n");}return 0;}

0 0
原创粉丝点击