算法題---找出給定的字母字符串中連續遞增的最長子串

算法題目:給定任意一個非空的全是字母的字符串,找出其中按字典排序的,連續的子串。

情況舉例:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章