左旋转的字符串
思路
- 做了昨天的反转字符串里的单词我们知道了,在做字符串相关的题目时,可以考虑字符串的部分反转,即先反转字符串的一部分,再反转字符串的另一部分
- 这道题也是如此。我们就拿字符串“abcdefg”和数字2举例,我们可以将这个字符串分成两部分,即前面两个字符和后面剩下的字符,我们分别对其进行反转得到了字符串“bagfedc”,最后我们再对整个字符串反转,就得到了我们想要的结果“cdefgab”
具体步骤
- 先写一个反转字符串指定区域的函数
void Part_reverseWords(char * s, int left, int right) { while(left <= right) { char temp = s[left]; s[left] = s[right]; s[right] = temp; left++; right--; } }
- 对字符串前n个字符进行反转,再对余下的字符反转
- 最后对整个字符串反转
- 返回反转后的字符串
实现代码
void Part_reverseWords(char * s, int left, int right) { while(left <= right) { char temp = s[left]; s[left] = s[right]; s[right] = temp; left++; right--; } } char* reverseLeftWords(char* s, int n){ int len = strlen(s); Part_reverseWords(s,0,n-1); //对字符串前n个字符进行反转 Part_reverseWords(s,n,len-1); //对余下的字符反转 Part_reverseWords(s,0,len-1); //对整个字符串反转 return s; }