1.有一个m*n 的网格,在每个格子上有一个非0 整数。 你每次只能向下或者向右移动一格,求你从左上角移动到最右下角,路径上数字和的最大值。
实例1:
[
[2,3,1],
[2,5,3],
[4,2,1]
]
输出:14
解释:2->3->5->3->1 路径和的最大值
function maxValue(grid) {
let row = grid.length,col = grid[0].length;
for(let i = 1; i < col;i++){
grid[0][i] += grid[0][i - 1]
}
for(let j = 1; j < row;j++){
grid[j][0] += grid[j - 1][0]
}
for(let i = 1; i < row; i++){
for(let j = 1; j < col;j++){
grid[i][j] += Math.max(grid[i - 1][j],grid[i][j - 1]);
}
}
return grid[row - 1][col - 1];
}
2.数字字符串中最大的公共前缀字符串
输入描述
flower,flow,flight
一组包含公共前缀的数组字符串
输出描述
fl
//javascript V8
let line = readline().split(","),len = line.length,res = line[0],commonstr;
for(let i = 1; i < len;i++) {
if(line[0].length == 0) {
break;
}
commonstr = commonstring(res,line[i]);
}
console.log(commonstr);
function commonstring(s1,s2) {
let index = 0,minlen = Math.min(s1.length,s2.length);
while(index < minlen && s1[index] == s2[index]) {
index++;
}
let commonstr = s1.substring(0,index);
return commonstr;
}
3.括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:
输入:n = 1
输出:[“()”]
var generateParenthesis = function(n) {
var res = [];
dfs("",n,n,res);
return res;
}
var dfs = function(str,left,right,res) {
if(left == 0 && right == 0) {
res.push(str);
return;
}
if(left > right) {
return;
}
if(left > 0) {
dfs(str + "(",left - 1,right,res);
}
if(right > 0) {
dfs(str + ")",left,right - 1,res);
}
}
4.一个字符串 s,找到 s 中最长的回文子串。
输入:s = “cbbd”
输出:“bb”
输入:s = “babad”
输出:“bab”
var longestPalindrome = function(s) {
let maxlen = 1,start = 0;
for(let i = 0; i < s.length -1; i++) {
for(let j = 1; j <s.length;j++) {
if(j - i + 1 > maxlen && judge(i,j,s)) {
maxlen = j - i + 1;
start = i;
}
}
}
return s.substr(start,maxlen);
};
function judge (left,right,s) {
while(left < right) {
if(s[left] !== s[right]) {
return false
}
left++;
right--;
}
return true;
}