モバイル2020インタビューの質問:家主との戦い

質問:インターネットでは、「ファイトランドロード」と呼ばれる非常に人気のあるトランプのプレイ方法があります。ルールの1つは、プレーヤーが連続したカードをプレイできることです。通常、5枚以上の連続したカードが必要です(例:56789)。今度は、プレイヤーの手札の中で最も長い連続したカードを見つけるためのプログラムを書く必要があります。ルールは次のとおりです
。1。簡単にするために、JQKAを考慮せずに、番号1〜9を含むカードのみを考慮します。2。
カードが順番に配置されていると仮定します。例:
2334455678;
3。連続した出力最も連続したカードを持つカード。同じ長さのシーケンスが2つある場合は、次のように後者のシーケンスを出力します。234678、シーケンス678を出力します
。4。出力結果は、「678」、「3456」などの文字列で、数字の間にスペースはありません。
5.文字列の長さは50を超えません。

アイデア:質問のアイデアはすでに非常に単純です。アイデアは、直接トラバースし、最大長の間隔を維持し、同時に現在のステータスを記録することです。

コード:

public static String doudizhu(String s){
    
    
        if(s.length()==0) return null;
        int cur_l=0,cur_r=1;//当前的区间
        int max_l=0,max_r=0;//维护的最大区间
        int max_len=0,cur_len=1;//维护两个长度
        int dp[]=new int[s.length()];
        int cnt=0;
        for(int i=0;i<s.length();i++){
    
    
            char c=s.charAt(i);
            dp[cnt++]=c-'0';
        }
        //dp[cnt]=0;
        for(int i=1;i<cnt;i++,cur_r++){
    
    
            if(dp[i]==(dp[i-1]+1)){
    
    
                cur_len++;
            }else{
    
    
                //System.out.println("cur_len:"+cur_len+" max_len="+max_len);
                if(cur_len>=max_len){
    
    
                    max_l=cur_l;
                    max_len=cur_len;
                    max_r=cur_r;
                    //System.out.println("cur_l="+cur_l+"   cur_r="+cur_r);
                }
                cur_l=cur_r;
                cur_len=1;
            }
        }
        if(cur_len>=max_len){
    
    //判断最后一次,最长的序列在最后情况
            max_l=cur_l;
            max_len=cur_len;
            max_r=cur_r;
            //System.out.println("cur_l="+cur_l+"   cur_r="+cur_r);
        }
//        System.out.println("lastcur_l="+cur_l+"   cur_r="+cur_r);
        System.out.println("cur_len:"+cur_len+" max_len="+max_len);
        System.out.println("max_l="+max_l+"   max_r="+max_r);
        String ans="";
        for(int i=max_l;i<max_r;i++) ans+=dp[i];

        return ans;
    }

    public static void main(String args[]) {
    
    
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
    
    
            String s=cin.nextLine();
            String res=doudizhu(s);
            System.out.println(res);
        }
    }

おすすめ

転載: blog.csdn.net/dl962454/article/details/109024363