文章目录
1221. 分割平衡字符串
题目链接
思路
利用一个统计变量,线性扫描整个字符串,遇到L则加一,遇到R则减一,当统计变量为零的时候计数器加一
题解
- js
function balancedStringSplit(s: string): number {
let ans = 0, d = 0;
for (let i = 0; i < s.length; ++i) {
const ch = s[i];
if (ch === 'L') {
++d;
} else {
--d;
}
if (d === 0) {
++ans;
}
}
return ans;
};
1827. 最少操作使数组递增
题目链接
思路
判断如果当前的数比前一个数大
- 如果满足条件,重置前一个数为当前数加一
- 如果不满足,需要把当前的数变成前一个数加一
题解
- js
function minOperations(nums: number[]): number {
let ans = 0, pre = 0
for (let i = 0; i < nums.length; i++) {
if (pre < nums[i]) {
pre = nums[i] + 1
} else {
ans += pre - nums[i]
++pre
}
}
return ans
};
2144. 打折购买糖果的最小开销
题目链接
思路
将数组从大到小排序,定义一个spend作为累加,每计算两个就跳过一个
题解
- js
function minimumCost(cost: number[]): number {
cost.sort((a, b) => b - a);
let spend = 0;
const len = cost.length;
for (let i = 1; i <= len; i++) {
if (i % 3 === 0) continue;
spend += cost[i - 1];
}
return spend;
};
1400. 构造 K 个回文字符串
题目链接
思路
找最多能构造的回文串数,其实就是字符串的长度,每个字符独自形成回文串,找最少能构造的回文串数,就是找出现奇数次的字符个数(出现奇数次的字符要想形成回文串,必须要和出现偶数次的字符搭配,并且不能和另一个出现奇数次的字符搭配),然后看k是否在这个范围内
题解
- js
function canConstruct(s, k, m = {}): boolean {
const max = s.length;
let min = 0;
for (const c of s) {
m[c] = (m[c] || 0) + 1;
}
for (const v of Object.values(m)) {
if (+v & 1) min++;
}
return k >= min && k <= max;
};