挑戦:bing正規と20進数の加算を切り取る

10852 ワード

マイクロソフトが発売した次世代の英語学習エンジンで、私たちがよく使う単語がたくさん収録されています.しかし、現実の生活では、規則のない文字列もよく見られ、辞書が正常に収録できないことがありますが、規則のない文字列から正規の単語を抽出することができますか?   例えば、異なる位置の文字「b」、「i」、「n」、「g」を切り取って単語「bing」に組み合わせた文字列「iinbinbing」がある.1から計数を開始すると、「b」「i」「n」「g」の4文字の出現位置はそれぞれ(4,5,6,10)(4,5,9,10)、(4,8,9,10)、(7,8,9,10)であるため、合計4単語「bing」に組み合わせることができる.  私达の问题は:今任意の文字列を与えて、ただ‘b’‘i’‘n’‘g’のこの4种类のアルファベットを小文字するだけで、すみません全部で何个の単语bingに组み合わせることができますか?  文字列の長さは10000を超えません.結果が大きい場合がありますので、10^9+7の余剰数を取った後の結果を出力してください. 考え方:bingの回数=bの回数+biの回数+...
public class Test 
{ 
   public static  int howmany(String s)
    {
	   int b_count=0;
	   int bi_count=0;
	   int bin_count=0;
	   int bing_count=0;
	   
	   for (int i = 0,length=s.length(); i < length; i++) {
		switch(s.charAt(i))
		{
		case 'b': b_count=++b_count% 1000000007;
		break;
		case 'i': bi_count=bi_count% 1000000007+b_count;
		break;
		case 'n': bin_count=bin_count% 1000000007+bi_count;
		break;
		case 'g': bing_count=bing_count% 1000000007+bin_count;//bing     =b     +i     +...
		break;
		
		}
	}
        return bing_count% 1000000007;
    }
    //start   :          ,       。 
    public static void main(String args[]) 
    { 
       System.out.println(howmany("iinbinbing"));
    } 
    //end //  :          ,       。
}

-----------------------------------------------------------------------------------------------------------------------
20進数では,0−9の数字のほかに,アルファベットa−j(10−19を表す)を用いて,2つの20進数整数を与え,それらの和を求めた.
入力は2つの20進数整数で、いずれも0より大きく、100ビットを超えない.
出力はそれらの和(20進数)であり、最初の0は含まれません.20進数整数を文字列で表します.
挑戦は成功しませんでした!解析配列が間違っていましたが、ローカルテストで合格できました.ここに記録します.
構想1:String-->char[]-->char-->int-->char-->String(この道は私が通っている)
package bl.test;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class Test 
{ 
     static boolean f=false;//       
     static int count;
     static Map<Character, Integer> map=new HashMap<Character, Integer>();//       
     static Map<Integer,Character> map1=new HashMap<Integer,Character>();
     static String str="";
     static String str1="";

   public static  String calculate(String x,String y)
    {
       //     (  0  ,   0~9 a~j,     100)
       String test="[^0][0-9a-j]{0,101}";
       if(Pattern.matches(test, x)&&Pattern.matches(test, y)){
    	   //  --  
            for (int i = 97, j=10; i <=106; i++,j++) {
                map.put((char)i, j);
            } 
           //  --  
            for (int i = 10, j=97; i <=19; i++,j++) {
                map1.put(i, (char)j);
            } 
           
            for(int i1=0,j1=48;i1<=9;i1++,j1++){
                map1.put(i1,(char)j1);
            }
            
            int temp_res;//             
            int get1 = 0;//       
           int a=x.length();
           int b=y.length();
          
           if(a>=b){
               for(int i=b-1,j=a-1;i>=0;i--,j--){
                   temp_res=getValue(y.charAt(i))+getValue(x.charAt(j));
                   get1=getValue1(temp_res,get1);
                   str=str+String.valueOf(map1.get(get1));  
                   if(i==0&&temp_res>=20){//           
                	   if(j>0){
                       for (int k = j-1; k>=0; k--) {
                       get1=getValue1(getValue(x.charAt(k)),get1);
                          str=str+String.valueOf(map1.get(get1));
                    }
                	   }else{
                		   str=str+"1";//                
                	   }
                   }else if(i==0){
                	   for (int k = j-1; k>=0; k--) {
                           str=str+String.valueOf(map1.get(getValue(x.charAt(k))));
                     } 
                   }
               }
           }else{
               for(int i=a-1,j=b-1;i>=0;i--,j--){
                   temp_res=getValue(x.charAt(i))+getValue(y.charAt(j));
                   get1=getValue1(temp_res,get1);
                   str=str+String.valueOf(map1.get(get1));   
                   if(i==0&&temp_res>=20){
                       for (int k = j-1; k>=0; k--) {
                       get1=getValue1(getValue(y.charAt(k)),get1);
                          str=str+String.valueOf(map1.get(get1));
                    }
                   }else if(i==0){
                	   for (int k = j-1; k>=0; k--) {
                              str=str+String.valueOf(map1.get(getValue(y.charAt(k))));
                        } 
                   }
                   }
           }
           
       }else{
        return "      ";
           
       }
       //    
       char[] charArrage=str.toCharArray();
       for(int i=charArrage.length-1;i>=0;i--){
           str1+=charArrage[i];
       }
       return str1;
    }
    
    //r       ,r_t     。    
    public static int getValue1(int r,int r_t){
        if(f){
            r=r+1;
            f=false;
            getValue1(r,r_t);
        }
        if(r>=20){//   
            r_t=r%20;
            f=true;
            return r_t;
            }else{
                r_t=r;
                f=false;
                return r_t;
            }
    }

       public static int getValue(char a){//     int  ,    
                if(map.get(a)!=null){
                    return (Integer) map.get(a);
                }else{
                    return Integer.parseInt(String.valueOf(a));
                }
            
       }
   
    //start   :          ,       。 
    public static void main(String args[]) 
    { 
       System.out.println(calculate("1","10"));
    } 
    //end //  :          ,       。
}
構想2:20進法を探して簡単なASSICコード値を計算する法則(この道は詰まって死んだ)
package csdnchallenge;

import java.util.regex.Pattern;


public class Test 
{ 
   public static  String calculate(String x,String y)
    {
	   //     (  0  ,   0~9 a~j,     100)
	   String test="[^0][0-9a-j]{0,101}";
	   if(Pattern.matches(test, x)&&Pattern.matches(test, y)){
		   int a=x.length();
		   int b=y.length();
		   int temp=(a<=b?a:b);//temp       
		   //char[] result=new char[2];
		   String result="";
		   String temp_result;
		   for(int i=temp-1; i>=0;i--) {
			  char c;
			   int t=(int)x.charAt(i)+(int)y.charAt(i);
			   
			   if((int)x.charAt(i)>=97||(int)y.charAt(i)>=97){//      
				   if(t>=106&&(t<=)){
					   
				   }
			   }
			   //for(int k=96;k<=206;k++){
				   if(t<106){//    10
						  temp_result=String.valueOf( Integer.parseInt(String.valueOf(x.charAt(i)))+Integer.parseInt(String.valueOf(x.charAt(i))));
						  result=result+temp_result;
					   }else{//  10  
						   
						   
					   }
			 //  }
			
		 //  temp_result=(char)((int)x.charAt(i)+(int)y.charAt(i));
			 
		   }
		   //return new String(result);
	   }else{
		  System.out.println("      ");;
		   
	   }
	   return "error";
	  
	
	  
	  //  0-9 assic 48-57
	  
	  //  a-j assic 97--106
	
	  
		  
			 
		//  if((int)x.charAt(i)<=57){
				//  if((int)y.charAt(i)<=57){
					//  Integer.parseInt(String.valueOf(c))
				 // }
				  
			//  }
		//	System.out.println("---"+((int)x.charAt(i)+(int)y.charAt(i)));
		//System.out.println((int)'1'+(int)'j');//155
			//  System.out.println((int)'1'+(int)'i');//154
			//  System.out.println(((int)'9'+(int)'1')+"---"+((int)'8'+(int)'2')+"--"+((int)'4'+(int)'6'));//106---106--106
		//System.out.println(((int)'2'+(int)'6')+"=="+(char)'8');//104==8
			  //System.out.println("---"+(int)'j'+"==="+(char)106);//106===j
		//  for(){}
		  /* switch(x.charAt(i))
		   {
		   case 'a':c=10;
		   break;
		   }
		   switch(y.charAt(i))
		   {
		   case 'a':d=10;
		   break;
		   }
		  int e=(c+d)%20;*/
		
	  
	   
	  
    }
   
   /*public static String zz(String str){
	   String test="[^0][0-9a-j]{1,100}";
	   if(Pattern.matches(test, str)){
		   return "ok";
	   }else{
		   return "no";
		   
	   }*/
	   
	
	   
   
    //start   :          ,       。 
    public static void main(String args[]) 
    { 
      // System.out.println(calculate("1","1"));
    	//107---97
    // System.out.println((int)'3'+(int)'8'+"---"+(int)'a');
    	System.out.println((int)'3'+(int)'6'+"---"+(int)'9');//105---57   48
    	System.out.println((int)'3'+(int)'7'+"---"+(int)'a');//106---97
    	//System.out.println((int)'9'+(int)'9'+"---"+(int)'i');//114---105(  9)
    	//System.out.println((int)'8'+(int)'9'+"---"+(int)'h');//113---104
    	//System.out.println((int)'7'+(int)'9'+"---"+(int)'g');//112---103
    	System.out.println((int)'5'+(int)'5'+"---"+(int)'a');//106---97
    	System.out.println((int)'5'+(int)'6'+"---"+(int)'b');//107---98
    	System.out.println((int)'a'+(int)'a'+"---"+(char)(194-48));//194---?
    	System.out.println((int)'j'+(int)'j'+"---"+(char)(212-48));//163---?
    //	System.out.println((int)'8'+(int)'a'+"---"+(int)'i');//153---105(  48)
    // System.out.println((int)'b'+(int)'1'+"---"+(int)'c');//147---99
    //System.out.println((int)'a'+(int)'1'+"---"+(int)'b');//146---98
    //	System.out.println((int)'3'+(int)'4'+"---"+(int)'7');//103---55(  48)
    	//System.out.println((int)'3'+(int)'5'+"---"+(int)'8');	//104---56
    	
    	//108---98
   //  System.out.println((int)'4'+(int)'8'+"---"+(int)'b');
     //System.out.println((int)'6'+(int)'6'+"---"+(int)'b');
    	//char a='9',b='a';
    	//char a1='b',b1='c';
    	//char a2='4',b2='6';
    	//char t='j',t1='0',t2='1',t3='2';
    	//57 97 98 99 52 54 106 48 49 50
    	//System.out.println((int)a+" "+(int)b+" "+(int)a1+" "+(int)b1+" "+(int)a2+" "+(int)b2+" "+(int)t+" "+(int)t1+" "+(int)t2+" "+(int)'2');
    	//System.out.println(a+b);//154
    	//System.out.println(a1+b1);//197
    	//System.out.println(a2+b2);//106
    
    } 
    //end //  :          ,       。
}