大家好,今天我将继续分享我的豆包MarsCode AI刷题。这次我将解决两个问题,首先是简单的字符串替换问题,其次是身为困难题的字符串排序问题。
第一题——字符串替换挑战
问题描述
给定一个字符串s,编写一个函数,将字符串中的小写字母a替换为"%100",并返回替换后的字符串。
示例
对于字符串"abcdwa",所有a字符会被替换为"%100",最终结果为"%100bcdw%100"。
解答思路
这个问题相对简单,我们可以遍历字符串,并使用条件语句检查每个字符是否为'a'。如果是,我们将其替换为"%100"。一行代码就搞定了
实现代码
javascript
代码解读
复制代码
function solution(s) {
return s.split('').map(char => char === 'a' ? '%100' : char).join('');
}
function main() {
console.log(solution("abcdwa") === "%100bcdw%100");
console.log(solution("banana") === "b%100n%100n%100");
console.log(solution("apple") === "%100pple");
}
main();
运行结果确认无误,我们继续进行下一题。
第二题——最小字典序挑战
这是一道困难题,我刚看到题目的时候也没什么思路,看了十几分钟还是让ai给的思路。看到豆包的思路后就差不多写出来了
问题描述
小U拥有一个由0和1组成的字符串,她可以进行最多k次操作,每次操作可以交换相邻的两个字符。目标是通过这些操作,使得最终得到的字符串字典序最小。
示例
小U当前有一个字符串"01010",她最多可以进行2次相邻字符交换操作。通过这些操作,她可以将字符串调整为"00101",这是可以通过不超过2次操作得到的字典序最小的字符串。
解答思路
这个问题可以使用贪心算法来解决。我们的目标是尽可能地将0移到字符串的前面。因此,我们应该在每次操作时,找到最左边的1,并尝试将其与左侧最近的0交换。
实现代码
javascript
代码解读
复制代码
function solution(n, k, s) {
let s_list = s.split('');
for (let i = 0; i < n && k > 0; i++) {
if (s_list[i] === '1') {
// 找到左侧最近的'0'进行交换
for (let j = i - 1; j >= 0 && k > 0; j--) {
if (s_list[j] === '0') {
[s_list[i], s_list[j]] = [s_list[j], s_list[i]];
k--;
break;
}
}
}
}
return s_list.join('');
}
// 测试用例
console.log(solution(5, 2, "01010") === '00101');
console.log(solution(7, 3, "1101001") === '0110101');
console.log(solution(4, 1, "1001") === '0101');
在这个实现中,我们通过两层循环来确保每次操作都是有效的,并且尽可能地将0字符移到前面。外层循环负责遍历字符串,内层循环负责找到并交换1和0。通过这种方式,我们能够确保在操作次数限制内得到尽可能小的字典序字符串。
可以分为以下步骤:
- 遍历字符串:使用一个循环从字符串的第一个字符开始遍历。
- 寻找
1字符:在每次迭代中,如果当前字符是1,则尝试将其与左侧最近的0进行交换。 - 交换操作:为了实现交换,我们需要从当前
1字符的位置向左查找,找到第一个0字符。找到后,我们将这两个字符交换,并将操作次数k减一。 - 停止条件:如果
k变为0,即没有剩余的操作次数,或者已经遍历完整个字符串,则停止操作。
运行测试用例,结果符合预期。
作者:睡个好jo
链接:juejin.cn/post/744252…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。