1.统计字符出现次数
function calcCharCount(str) {
let res = {};
for (let i = 0; i < str.length; i++) {
const key = str[i];
if (res[key]) {
res[key] += 1;
} else {
res[key] = 1;
}
}
return res;
}
function calcCharCount(str) {
return [...str].reduce((res, key) => {
if (res[key]) {
res[key] += 1;
} else {
res[key] = 1;
}
return res;
}, {});
}
function calcCharCount(str) {
return [...str].reduce((res, key) => (res[key]++ || (res[key] = 1), res), {});
}
const res = calcCharCount("hello world!");
console.log("res", res);
2. 单词首字母大写
function capitalize(str) {
let arr = str.split(" ");
return arr.map(word => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(" ");
}
const res = capitalize("coder");
console.log(res);
3. 无重复字符的最长子串 [数组-3]
function lengthOfLongestSubstring(str) {
let l = 0;
let res = 0;
let map = new Map();
for (let r = 0; r < str.length; r++) {
if (map.has(str[r]) && map.get(str[r]) >= l) {
l = map.get(str[r]) + 1;
}
res = Math.max(res, r - l + 1);
map.set(str[r], r);
}
return res;
}
const res = lengthOfLongestSubstring("abcabc");
console.log(res);
4. 数组交集 [数组-350]
function intersection(nums1, nums2) {
const res = [];
const map = new Map();
for (let i = 0; i < nums1.length; i++) {
if (map.has(nums1[i])) {
map.set(nums1[i], map.get(nums1[i]) + 1);
} else {
map.set(nums1[i], 1);
}
}
for (let i = 0; i < nums2.length; i++) {
if (map.get(nums2[i])) {
res.push(nums2[i]);
map.set(nums2[i], map.get(nums2[i]) - 1);
}
}
return res;
}
const res = intersection([1, 2, 3, 3, 5, 7], [2, 3, 3, 4, 7]);
console.log(res);