Preguntas de la entrevista de Mobile 2020: Lucha contra los propietarios

Pregunta: En Internet, existe un método de juego muy popular para jugar a las cartas llamado "Fight Landlord". Una de las reglas es que los jugadores pueden jugar cartas consecutivas, generalmente requiriendo más de 5 cartas consecutivas (inclusive), por ejemplo: 56789. Ahora es necesario escribir un programa para encontrar la carta consecutiva más larga en la mano del jugador. Las reglas son las siguientes:
1. En aras de la simplicidad, solo considere las tarjetas que contienen los números del 1 al 9, sin considerar JQKA;
2. Suponiendo que las tarjetas se han ordenado, por ejemplo:
2334455678;
3. Genere el cartas con la mayor cantidad de cartas consecutivas. Si hay dos secuencias con la misma longitud, genere la última secuencia, como: 234678, genere la secuencia 678;
4. El resultado de salida es una cadena, como "678", "3456", sin espacios entre los números;
5. Caracteres La longitud de la cadena no supera los 50.

Idea: La idea de la pregunta ya es muy simple, la idea es atravesar directamente, mantener un intervalo de longitud máximo y registrar el estado actual al mismo tiempo.

Código:

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);
        }
    }

Supongo que te gusta

Origin blog.csdn.net/dl962454/article/details/109024363
Recomendado
Clasificación