做基网站工商天眼查官网
做基网站,工商天眼查官网,网站注册免费永久,张裕网站建设的目标题目链接#xff1a;55. 右旋转字符串
题目描述
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k#xff0c;请编写一个函数#xff0c;将字符串中的后面 k 个字符移到字符串的前面#xff0c;实现字符串的右旋转操作…题目链接55. 右旋转字符串
题目描述
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k请编写一个函数将字符串中的后面 k 个字符移到字符串的前面实现字符串的右旋转操作。
例如对于输入字符串 abcdefg 和整数 2函数应该将其转换为 fgabcde。
输入描述
输入共包含两行第一行为一个正整数 k代表右旋转的位数。第二行为字符串 s代表需要旋转的字符串。
输出描述
输出共一行为进行了右旋转操作后的字符串。
输入示例
2
abcdefg
输出示例
fgabcde
提示信息
数据范围 1 k 10000, 1 s.length 10000;
文章讲解代码随想录
题解1两轮翻转
思路把字符串分为2部分目标是把右边移到左边。可以先整体翻转一次字符串此时字符串顺序为反向的右部分和反向的左部分再将这2部分反转一遍即可得到答案。
注意此题为 ACM 模式需要自己在代码中读取输入打印输出。
const readline require(readline);
const rl readline.createInterface({input: process.stdin,output: process.stdout
});const num 2;
const inputs [];const reverse function (arr, start 0, end arr.length) {end end - 1;while (start end) {const _ arr[start];arr[start] arr[end];arr[end--] _;}
}rl.on(line, (row) {inputs.push(row);if (inputs.length num) {return;}let k parseInt(inputs[0]), s inputs[1];s s.split();reverse(s);reverse(s, 0, k);reverse(s, k, s.length);console.log(s.join());
});
分析时间复杂度为 O(n)空间复杂度为 O(n)。
题解2还是两轮翻转
思路还是将字符串分为2部分先将这2部分各自翻转一遍再整体翻转一遍得出答案和上个题解的不同在于区间不同。
const readline require(readline);
const rl readline.createInterface({input: process.stdin,output: process.stdout
});const num 2;
const inputs [];const reverse function (arr, start 0, end arr.length) {end end - 1;while (start end) {const _ arr[start];arr[start] arr[end];arr[end--] _;}
}rl.on(line, (row) {inputs.push(row);if (inputs.length num) {return;}let k parseInt(inputs[0]), s inputs[1];s s.split();reverse(s, 0, s.length - k);reverse(s, s.length - k, s.length);reverse(s);console.log(s.join());
});
分析时间复杂度为 O(n)空间复杂度为 O(n)。
收获
1. 对字符串翻转有了进一步的理解。
2. 了解了 ACM 模式的机试题输入需要自己写代码来读取输出也需要自己写代码来输出。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86300.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!