题目
输入一个字符串仅包含大小写字母和数字,求字符串中包含的最长的非严格递增连续数字序列长度。比如:12234属于非严格递增数字序列。
输入输出描述
- 输入abc2234019A334bc
- 输出4
- 说明:2234为最长的非严格递增连续数字序列,所以长度为4
思路
创建一个记录字符串每一位往前数有多少个非严格连续递增数字的数组dp
dp初始每一位都是1,因为每个位置字符自己也算
字符串转数组后每一位转parseInt,这样就可以把数字和其它区分开来
如果遇见数字后一位等于前一位或者等于前一位+1的,就在记录对应dp数组中相应连续数字数(应该是前一位的数字+1)
代码
function noStrictDigit(str) {
let dp = new Array(str.length).fill(1);
let arr = str.split('').map(n => parseInt(n));
for (let i = 0; i <arr.length; i++) {
if (isNaN(arr[i])) {
continue;
} else {
if (arr[i] === arr[i-1] || arr[i] === (arr[i-1] + 1) ) {
dp[i] = dp[i-1] + 1;
}
}
}
console.log(dp.sort()[dp.length - 1]);
}
noStrictDigit('abc2234019A334bc');
运用到的知识点技巧
- 新建数组时指定长度并且填充初始值
let arr = new Array(len).fill(init);
// len代表长度数字,init代表数组每一位的初始值