亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

字符串旋轉的若干種算法 (待續)

發布時間:2020-07-11 01:12:06 來源:網絡 閱讀:443 作者:shangluyi 欄目:編程語言

題目描述:

對于一個字符串,和字符串中的某一位置,請設計一個算法,將包括i位置在內的左側部分移動到右邊,將右側部分移動到左邊。

給定字符串A和它的長度n以及特定位置p,請返回旋轉后的結果。

測試樣例:

"AbcdeFgh",8,4  (為了方便起見我把兩部分的起始元素用大寫字母表示)
返回:"FghAbcde"


思路:

·方法一:將整個字符串左移或右移(p - 1)次


·方法二: 將要分成的前部分或后部分整體移動


·方法三:利用棧

如: 先將FGH放置到前面,變成"FghdeFGH" 。每次覆蓋原有元素的時候將原來的元素存入隊列中,上述步驟執行完畢后依次從隊列中出隊并放入對應的位置即可。

代碼如下:

string rotateString(string A, int n, int p)
{
	queue<char> que;
	int i = p;
	int tmp_i = 0;
	for (i = p; i < n; i++)
	{
		que.push(A[tmp_i]);
		A[tmp_i] = A[i];
		++tmp_i;
	}
	que.push(A[tmp_i]);
	while (!que.empty())
	{
		A[tmp_i] = que.front();
		que.pop();
		++tmp_i;
	}
	A[tmp_i] = '\0';
	return A;
}


·方法四: 三次交換

這是一種很巧妙的算法。下面舉例說明:

還是用測試用例中的那段字符串 "AbcdeFgh"

根據p的位置,可以分為兩部分 "Abcde" 和 "Fgh"

可以先對兩個字符串分別逆序(第一次 和 第二次交換),得到  "edcbAhgF"

然后對整個字符串進行逆序(第三次) 得到 "FghAbcde"

我在方法三中用到了棧,其實是跟該方法類似的思想,

不過這個方法比我自己的方法三不知道高到哪里去了 (◎﹏◎)


·方法五: 合并、并讀取 

合并時,對于string對象 直接用庫里已經重載好的 "+" 操作符即可

(如果要合并兩個C風格的字符串,則需要用strcat函數)

例如測試用例的字符串 合并后為 "AbcdeFghAbcdeFgh"

然后再將這個合并后的字符串的第(p + 1)個元素到 (p + 1 + n)個元素按順序放入原字符串中即可。

代碼如下:

string rotateString(string A, int n, int p)
{
	queue<char> que;
	int i = p;
	int tmp_i = 0;
	for (i = p; i < n; i++)
	{
		que.push(A[tmp_i]);
		A[tmp_i] = A[i];
		++tmp_i;
	}
	que.push(A[tmp_i]);
	while (!que.empty())
	{
		A[tmp_i] = que.front();
		que.pop();
		++tmp_i;
	}
	A[tmp_i] = '\0';
	return A;
}




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

易门县| 黑水县| 米林县| 中方县| 广安市| 汉源县| 兴业县| 永春县| 体育| 安岳县| 涟水县| 化隆| 琼结县| 惠来县| 北辰区| 乐昌市| 景东| 筠连县| 靖宇县| 庆城县| 集安市| 荆州市| 鲜城| 兰考县| 绥宁县| 青阳县| 分宜县| 乳山市| 固阳县| 文山县| 新乡市| 砀山县| 平谷区| 汉寿县| 赤峰市| 庄浪县| 南平市| 黄龙县| 沂水县| 江永县| 榆林市|