【腾讯笔试题 构造回文 】“存在数组越界非法访问等”错误
之前刷别的题,也是这种问题,可是本地调试不会出错,想问下这类该怎么解决哇?求助#腾讯#题目描述:
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:
对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子:
abcda google输出例子:
2 2var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(data) { // 获取输入 var inputs = data.trim().split(''); // 处理 var result = longestPalindrome(inputs); // 输出结果 console.log(result+'\n'); }); function longestPalindrome(str){ if(!str) return 0; let maxLen = 1; let isPalindrome = new Array(str.length]; for(let i=0;i<str.length;i++){ isPalindrome[i] = new Array(str.length); for(let j=0;j<str.length;j++){ isPalindrome[i][j] = 1; if(j==i+1 && str[i]===str[j]) { isPalindrome[i][j] = 2; maxLen = 2; } } } for(let len=3; len<=str.length;len++){ for(i=0;i<=str.length-len;i++){ let j = i+len-1; if(str[i]===str[j]) isPalindrome[i][j] = isPalindrome[i+1][j-1] +2; else isPalindrome[i][j] = Math.max(isPalindrome[i][j-1],isPalindrome[i+1][j]); maxLen = Math.max(maxLen,isPalindrome[i][j]); } } return str.length-maxLen; }