91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間: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

康马县| 黄石市| 根河市| 阜平县| 兴业县| 黔东| 虞城县| 永昌县| 江安县| 新晃| 油尖旺区| 肃宁县| 乐都县| 临汾市| 塔河县| 贺兰县| 江都市| 芦山县| 合阳县| 辽源市| 南陵县| 云南省| 甘泉县| 临漳县| 安溪县| 周宁县| 双辽市| 广宗县| 榕江县| 威远县| 邵阳市| 平原县| 昆山市| 鸡西市| 青海省| 绥宁县| 桐庐县| 山阳县| 灵宝市| 故城县| 璧山县|