最大递增子序列
最大递增子串
<1,2,3,8,4>最大递增子串应为<1,2,3,4>,长度为4。
解法:动态规划
len[1] = 1,表示下标为1且以1为最大元素的子串
len[2] = 2, 表示下标为2且以2为最大元素的子串
len[3] = 3, 表示下标为3且以3为最大元素的子串
len[5] = ?, 表示下标为5且以4为最大元素的子串,那么问号处的值是多少呢?
从8开始向前遍历,找到比4小的元素a[i],可能会找到多个a[i],然后选取len[i]中最大的那个加1就是len[5]的值。例如,我们先找到3发现len[3]=3,难么len[3]是不是最大的呢?继续往前找,找到了2,发现len[2]比len[3]小,然后在往前找,找到了1,发现len[1]还比len[3]小,所以len[5] = len[3]+1 = 4;
所以最大子串长度为4;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine().replace(" ", "");
char[] arr = str.toCharArray();
int[] len = new int[arr.length + 1];
// len[i]表示以arr[i]为最大元素的子串长度
int max = 0;
len[1] = 1; // len[1]对应a[0]
for (int i = 1; i < arr.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (arr[j] < arr[i] && len[j + 1] > max)
max = len[j + 1];
}
len[i + 1] = max + 1;
}
max = 0;
for (int i = 1; i < len.length; i++)
if (max < len[i])
max = len[i];
System.out.println(max);
}
}
}

浙公网安备 33010602011771号