poj1068括号加密

来源:互联网 发布:omtp转ctia软件 编辑:程序博客网 时间:2024/06/08 06:04

这道题并不难,首先要明白题目意思,就是说一串由括号包含括号的字符串,这串字符串可以用两种编码方式来表示,题目实现的就是要需要我们根据一种编码方式求出对应字符串的另一种编码方式。

第一种编码方式是指:每遇到一个右半括号,就去统计他左边有多少左半括号,而这个左半括号数就是一个密码。

第二种编码方式是指:遇到一个右半括号,找到他相应的左半括号,再统计这个括号对里总共有多少左半括号,最外层的那个左半括号也算上一个,所以这种方式统计出来的左半括号数就是另一种密码。

其实大致的实现思路就是我描述两种编码的形式,我没有用复杂的算法之类的,只是纯粹简单的搜索,首先将一种编码方式还原成原始字符串,再把字符串转成另一种编码方式,不过在这个过程中为了方便,我在还原原始字符串也就是括号串的时候,用0表示左括号,1表示右括号。

代码实现如下:

package cn.itcast_test;import java.util.Scanner;public class Parenthesis {public static void main(String args[]){Scanner scan=new Scanner(System.in);int n=scan.nextInt();for(int k=0;k<n;k++){int num=scan.nextInt();int temp=0;int num0=0;int index=0;int []paren=new int[num*2];int []paren2=new int[num*2];StringBuilder sb=new StringBuilder();for(int i=1;i<=num;i++){     //根据每一次输入的数来初始化paren数组temp=scan.nextInt();for(;num0<temp;num0++){paren[index]=0;index++;}paren[index]=1;index++;}//for(int i:paren){//System.out.print(i+" ");//}//以上已经完全将输入的数据转换成了一组用0代表左括号1代表右括号的数组int num1=0;int index0=0;for(int i=0;i<num*2;i++){paren2[i]=paren[i];}for(int i=0;i<num*2;i++){if(paren2[i]==1){num1=0;for(int j=i-1;j>=0;j--){if(paren2[j]==0){paren2[j]=1;for(index0=j;index0<=i-1;index0++){if(paren[index0]==0){num1++;}}System.out.print(num1+" ");break;}}}}System.out.println();}}}