Huawei社の2020年秋のリクルートペンの質問

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/smarryw/article/details/98973837

まず、文字の全額を設定し、文字セットが占有します


説明を入力します。

占有と文字セットの合計量を含む文字列を入力し、文字セットは2つの@に接続されています。@文字セットが占有文字のセットです後に@文字の前の文字は、全体のコレクションのために金額を設定します。占領下の文字セットは、文字セットの文字の全額である必要があります。文字と文字のセット間の区切りにはカンマを使用します。文字のセットに加えて文字の数など、コロンで区切られた英語の数字と文字として表される:1、1文字を表します。文字だけの文字を考えてみましょう、大文字と小文字を区別し、正の数は、唯一の文字が占有されなかった場合など、まだ@識別子、、、100以上ではないの数を形作る考える:3、B:5、C:2 @

出力説明:

使用可能な文字セット。出力復帰改行。

例1:

入力:3、B:5、C:@ 2:1、B:2

出力:2、B:3、C:2

注:3つの文字、5番目のBの合計量、2番目C。占領下の文字セットはA、2番目のbです。占有文字セットは、従って、残りの利用可能な文字2、3番目のB、2 Cを再利用することができないからです。したがって、出力:2、B 3、C:2。文字列の入力が同じ出力を維持することに注意してください。することはできません出力b:3:2、C:2。文字がすべて占有されている場合は、出力なし。例えば:3、B:5、C:3、B:2、出力B:@ 2 3、C:2。
 

アイデア:

この質問は、文字列の分割、スプライスに主に関連しています。

ここに私自身のコードは、任意の改善であれば、大歓迎です!

public class HuaWei_08_07 {

    public static void main(String[] args){
      String s="a:3,b:5,c:2@a:3,b:1";
      HuaWei_08_07 hua=new HuaWei_08_07();
      String useStr=hua.UserStrings(s);
      System.out.print(useStr);
    }

    public String UserStrings(String s){
          String[] str=s.split("@");
          if(str.length==1){
              return str[0];
          }

         Map<String,Integer> map=new HashMap<>();
          for(int i=0;i<str.length;i++){
              map=putmap( map,str[i].split(","),i);
          }
          
        StringBuffer buf=new StringBuffer();
        for(String key:map.keySet()){
            if(map.get(key)!=0) {
               buf.append(key+":"+map.get(key)+",");
            }
        }
        String s1=buf.toString();
        return s1.substring(0,s1.length()-1);

    }


    public Map<String,Integer> putmap(Map<String,Integer> map,String[] str,int flag){
        for(int i=0;i<str.length;i++){
            String s2=str[i].split(":")[0];
            int a=Integer.parseInt(str[i].split(":")[1]);
            if(flag==1&&map.containsKey(s2)){
                int b=map.get(s2)-a;
                map.put(s2,b);
            }else{
                map.put(s2,a);
            }
        }

        return map;
    }

}

二、トライ木


件名の説明:


以下は、トライ木であり、円は各マーカーについて0~255の間の値の範囲に、子ノード点を内部ノードを表し、各内部ノード256個のノードに子を有しています。三角形は、各リーフノードは完全なキーを形成するために、リーフノード間のパス上のすべての文字に値が、ルートノードを格納するリーフノードを表します。

説明を入力します。


最初のデジタルライン1 Mは、三列に続くラベル、HasChild、POUDSアレイのサイズは、ラベルを表す表すHasChild、スペースで区切られた配列の内容をPOUDS。デジタル回線5つのN値は、配列値は、コンテンツを表すラインに続く、配列のサイズを表します。デジタルライン7は、キー配列のサイズを表し、そして1つの銀行は、文字のキー配列を探すために言いました。

出力説明:


キーが存在しない場合は、出力ラインに対応するキー値、出力0。

例1:


入力:

15
115 112 116 97 111 121 114 101 105 112 121 114 102 115 116
0 0 0 1 1 0 1 0 0 0 0 1 1 1 1
1 1 0 1 0 1 1 1 0 0 0 1 1 0 0
8
1 2 3 4 5 6 7 8
3
116 114 112

出力:

7

 

 

第三に、論理的なコンピューティング


件名の説明:


そして、一般的なロジックの計算は(&と表記)がある;または(と表記|);(として示されている!)されていません。その中で、自分の優先順位の関係ではありません>と(&)>または(!)(|)。

説明を入力します。


図1に示すように、スペースなしのテストケースの中央に関係なく、スペースの。

2、テストケース式は唯一の文字として表示されます。 "0"、 "1"、 "("、 ")"、 "&"、 "|"、 "!"。

3、テストケースは、入力に正当な入力、不法入国を検討する必要はありませんです。

4、テストケースは、長さが128文字を超えません。

図5に示すように、ブラケットは、ネストされた繰り返してもよいです。

例えば:

1 |(1&0)戻り値:1

1&0 | 0&1戻り値:0

!0&1つの| 0戻り値:1

((0&1)!)| 0戻り値:1

出力説明:


論理演算の出力の最終結果:0または1

例1:
入力:!(1&0)| 0&1

出力:1

例2:
入力:(1&0)&0 | 0!

出力:0
最初の解決策:関数を呼び出します

 /**第一种 调用函数*/
    public static  void Pipei(String s){

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        Object result=null;
        try {
            result = engine.eval(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

第二:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        int k = 0;
        while (input.length() != 1) {
            input = input.replaceAll("!1", "0");
            input = input.replaceAll("!0", "1");

            input = input.replaceAll("1&0", "0");
            input = input.replaceAll("0&1", "0");
            input = input.replaceAll("0&0", "0");
            input = input.replaceAll("1&1", "1");


            input = input.replaceAll("1\\|0", "1");
            input = input.replaceAll("0\\|1", "1");
            input = input.replaceAll("0\\|0", "0");
            input = input.replaceAll("1\\|1", "1");

            input = input.replaceAll("\\(1\\)", "1");
            input = input.replaceAll("\\(0\\)", "0");

            k++;
            if (k > 20) break;
        }
        System.out.println(input);
        sc.close();
    }

 

おすすめ

転載: blog.csdn.net/smarryw/article/details/98973837