华为机试题目-多最长子串筛选

<h3>问题描述和解决方案</h3>


```java

import java.util.Scanner;

/**
* 最长平台问题-衍生版
* <p>
*     问题描述:给定一个字符串,有字符连续出现,
*     请寻找这些连续字符串中最长的字符串,如果最长的串有多个,
*     请输出ascii最小的;
*     解决方案:先按照“最长平台”模型,计算出最大长度,
*     然后再次遍历字符串,寻找asc码值最大的的子串
* </p>
*/
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<len; 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<len;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);
}
}

```
<h3> 最长平台问题--C语言名题百则 </h3>
![在这里插入图片描述](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)

#华为offer##笔试题目##华为#
全部评论

相关推荐

和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务