// 连续子数组的最大和
let arr = [1, -1, 2, 4, -1, 5, 3, 1, 1, -2, 4, 2]
function maxSum() {
let collect = [];
collect[0] = arr[0];
for (let i = 1; i < arr.length; i++) {
if (collect[i-1] < 0) {
collect[i] = arr[i];
} else {
collect[i] = collect[i-1] + arr[i];
}
}
console.log(collect); // [1, 0, 2, 6, 5, 10, 13, 14, 15, 13, 17, 19]
let sum = collect.sort((a, b) => b - a)[0];
console.log(sum); // 19
}
// 判断字符串括号{}[]()是否闭合
// {[{()}]()} true
// {([)]} fasle
function isValid(str) {
let arr = str.split("");
let collect = [];
for (i = 0; i < arr.length; i++) {
let lastC = collect[collect.length - 1];
switch (arr[i]) {
case "(":
collect.push("(");
break;
case "{":
collect.push("{");
break;
case "[":
collect.push("[");
break;
case ")":
if (lastC === "(") {
collect.pop();
}
break;
case "}":
if (lastC === "{") {
collect.pop();
}
break;
case "]":
if (lastC === "[") {
collect.pop();
}
break;
}
}
return collect.length === 0;
}
let str = "{}{}{({)}}";
console.log(isValid(str)) // false
// 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。
// 给定的字符串只含有小写英文字母,并且长度不超过10000。
let str = "abcabc";
function isValid(str) {
let arr = str.split("");
let letter = [];
for (i = 1; i <= arr.length / 2; i++) {
let _arr = arr.slice(i); // 从下标0开始,取i后面的元素
let _other = arr.slice(0, i); // 取0-i,不包含i
letter = [..._arr, ..._other].join(""); // 拼一起判断是否等于本身
if (str === letter) {
return true;
}
}
return false;
}
console.log(isValid(str)); // true