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