單縣網(wǎng)站定制網(wǎng)絡(luò)營銷策劃的主要特點(diǎn)
卡碼網(wǎng)題目鏈接
字符串的右旋轉(zhuǎn)操作是把字符串尾部的若干個字符轉(zhuǎn)移到字符串的前面。給定一個字符串 s 和一個正整數(shù) k,請編寫一個函數(shù),將字符串中的后面 k 個字符移到字符串的前面,實(shí)現(xiàn)字符串的右旋轉(zhuǎn)操作。?
例如,對于輸入字符串 "abcdefg" 和整數(shù) 2,函數(shù)應(yīng)該將其轉(zhuǎn)換為 "fgabcde"。
輸入描述
輸入共包含兩行,第一行為一個正整數(shù) k,代表右旋轉(zhuǎn)的位數(shù)。第二行為字符串 s,代表需要旋轉(zhuǎn)的字符串。
輸出描述
輸出共一行,為進(jìn)行了右旋轉(zhuǎn)操作后的字符串。
輸入示例
2
abcdefg
輸出示例
fgabcde
思路:這道題最簡單的做法是申請額外的空間,但這樣就沒有練習(xí)算法的意義了? 我們增加點(diǎn)難度,不申請額外空間,只能在本串上操作,那么這道題的解法就和反轉(zhuǎn)字符串中的單詞
?類似了,使用整體反轉(zhuǎn)+局部反轉(zhuǎn)就可以實(shí)現(xiàn)反轉(zhuǎn)單詞順序的目的。
這道題通過 整體倒敘,把兩段子串順序顛倒,兩個段子串里的的字符在倒敘一把,負(fù)負(fù)得正,這樣就不影響子串里面字符的順序了。當(dāng)然大家也可以嘗試先局部反轉(zhuǎn)后整體反轉(zhuǎn)的做法,注意下反轉(zhuǎn)區(qū)間即可。
代碼如下:
#include<iostream>
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;//獲取右旋字符的個數(shù)cin >> str;//獲取字符串reverse1(str, 0, str.size() - 1);//先把整個字符串反轉(zhuǎn)過來reverse1(str, 0, num - 1);//再把右旋的部分字符串反轉(zhuǎn)過來reverse1(str, num, str.size()-1);//最后把剩余字符反轉(zhuǎn)過來,就實(shí)現(xiàn)了右旋字符串cout << str;return 0;
}