java求出最长平台的长度,华为机试题目-多最长子串筛选

问题描述和解决方案

```java

import java.util.Scanner;

/**

* 最长平台问题-衍生版

*

*     问题描述:给定一个字符串,有字符连续出现,

*     请寻找这些连续字符串中最长的字符串,如果最长的串有多个,

*     请输出ascii最小的;

*     解决方案:先按照“最长平台”模型,计算出最大长度,

*     然后再次遍历字符串,寻找asc码值最大的的子串

*

*/

public class LongPlateau {

public static void main(String[] args) {

System.out.println("最长平台模型...");

Scanner in = new Scanner(System.in);

String str = in.nextLine();

findMaxStr(str);

System.out.println("Game over ...");

}

public static void findMaxStr(String str){

int len = str.length();

int count = 1; //平台最大长度默认值

char[] arr = str.toCharArray();

for(int i=1; i

if(arr[i] == arr[i-count]){//固定起点位置,i-count ; 变化尺子的长度:count++

count++; //循环结束之后,便是最大平台的长度

}

}

System.out.println("最大长度:"+ count);

//如果多个相同长度的最大平台,选出ascii值最小的那个

int minChar = 0;//最小的ASC值

int index = 0; //初次出现的位置

for(int j=0;j

if(j+count > len){//接近越界,不需继续查找

break;

}

if((arr[j] == arr[j+count-1]) && (minChar < (int)arr[j])){

index =j ;//找到起始位置

minChar = (int)arr[j]; //更新最小的ASCII码值

}

}

//输出结果

System.out.println("起始位置: " + index +",字符:" + minChar);

String res = str.substring(index,index+count);

System.out.println("目标平台是:" + res);

}

}

```

最长平台问题--C语言名题百则

![在这里插入图片描述](

https://img-blog.csdnimg.cn/20200415112729989.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MDQwMTcz,size_16,color_FFFFFF,t_70#pic_center)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值