假设有一串字符串"186 186 150 200 160 130 197 200";现在求它的最长升序子串长度。
let str ="186 186 150 200 160 130 197 200";
let arr = str.split(" "); // 转化为数组
let arrLeft = []; // 存储每个数左边小于其的数的个数
for(let i=0; i<arr.length; i++){
arrLeft[i]=1; // 所有位置最小链长为1,所以可以初始设置为1
for(let j=0; j<i; j++){
// 如果最新的一个元素i的值大于它左边的任意位置j的值,那么把j位置链长+1和上一轮循环i处最长链长比较取最大值
if(arr[i]>arr[j]){
arrLeft[i] = Math.max(arrLeft[j]+1, arrLeft[i])
}
}
}
console.log(arrLeft); // [1, 1, 1, 2, 2, 1, 3, 4]
console.log(Math.max.apply(null, arrLeft)); // 4
上面这个是一个动态规划问题。