wordpress建站 app访问,国内app公司排名,做淘宝图标网站,重庆最新通告卡码网题目链接
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k#xff0c;请编写一个函数#xff0c;将字符串中的后面 k 个字符移到字符串的前面#xff0c;实现字符串的右旋转操作。
例如#xff0c;对于输入字符…卡码网题目链接
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k请编写一个函数将字符串中的后面 k 个字符移到字符串的前面实现字符串的右旋转操作。
例如对于输入字符串 abcdefg 和整数 2函数应该将其转换为 fgabcde。
输入描述
输入共包含两行第一行为一个正整数 k代表右旋转的位数。第二行为字符串 s代表需要旋转的字符串。
输出描述
输出共一行为进行了右旋转操作后的字符串。
输入示例
2
abcdefg
输出示例
fgabcde
思路这道题最简单的做法是申请额外的空间但这样就没有练习算法的意义了 我们增加点难度不申请额外空间只能在本串上操作那么这道题的解法就和反转字符串中的单词 类似了使用整体反转局部反转就可以实现反转单词顺序的目的。
这道题通过 整体倒叙把两段子串顺序颠倒两个段子串里的的字符在倒叙一把负负得正这样就不影响子串里面字符的顺序了。当然大家也可以尝试先局部反转后整体反转的做法注意下反转区间即可。
代码如下
#includeiostream
using namespace std;void reverse1(string s, int start, int end) {for (int i start, j end; i j; i, j--){char tmp s[j];s[j] s[i];s[i] tmp;}
}
int main()
{string str;int num;cin num;//获取右旋字符的个数cin str;//获取字符串reverse1(str, 0, str.size() - 1);//先把整个字符串反转过来reverse1(str, 0, num - 1);//再把右旋的部分字符串反转过来reverse1(str, num, str.size()-1);//最后把剩余字符反转过来就实现了右旋字符串cout str;return 0;
}