题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
const line = await readline();
if (line !== "") {
let l = findMostLong(line);
console.log(l);
}
})();
function isValid(s) {
if (s.length === 1) return true;
let mid = s.length / 2;
if (2 * mid === s.length) {
for (let i = 0; i < mid; i++) {
if (s.charAt(i) !== s.charAt(s.length - 1 - i)) {
return false;
}
}
} else {
for (let i = 0; i < mid; i++) {
if (s.charAt(i) !== s.charAt(s.length - 1 - i)) {
return false;
}
}
}
return true;
}
// f(0,n) = max( f(0,n-1) f(1,n) )
//
function findMostLong(line) {
let data = [];
for (let i = 0; i < line.length; i++) {
data[i] = [];
for (let j = i; j > -1; j--) {
if (isValid(line.substring(j, i + 1))) {
data[i][j] = line.substring(j, i + 1).length;
} else {
data[i][j] = Math.max(data[i - 1][j], data[i][j + 1]);
}
}
}
return data[line.length - 1][0];
}
