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