算法題目:給定任意一個非空的全是字母的字符串,找出其中按字典排序的,連續的子串。
情況舉例:
- 相同字母也算,例如zdfffsse,最長就是dfffss
- 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));
}