算法题---找出给定的字母字符串中连续递增的最长子串

算法题目:给定任意一个非空的全是字母的字符串,找出其中按字典排序的,连续的子串。

情况举例:

  1. 相同字母也算,例如zdfffsse,最长就是dfffss
  2. dfsdfsmmxx,最长就是dfs,相同长度的子串,就取从左到右看,第一次出现的。

算法思路:用一个for循环从左到右遍历,用count记录有序子串的长度,用max记录最大长度。每次遍历完一个有序子串都和max比较,若大于max,则更新max(小于等于都不管)。更新max的时候用start记录该子串的起始位置,便于输出。


Java实现,其余语言同理

//String input = "abcbcdffgggf";
String input = "bmv";
int max = 0;
int count = 1;
int start = 0;
		
for(int i=1; i<input.length(); i++){
    char pre = input.charAt(i-1);
    char now = input.charAt(i);
    if(now-pre>=0){ 
        count++;
    }else{
        if(max<count){
	    max = count;
	    start = i-count;
	}
	count = 1;
    }
}
//这里还需要比较一次,因为如果从某个字符到最后一个都是增序,会导致不会进入else更新max
max = max>count?max:count;
//System.out.println(start+" " + max);
//输出
for(int i=start; i<start+max; i++){
    System.out.print(input.charAt(i));
}

猜你喜欢

转载自blog.csdn.net/qq_24986539/article/details/79326749
今日推荐