題目:
2、給定乙個字串s[0…..n-1],要求把s的前k個字元移動到s的尾部,如把字串」abcdef」前面的2個字元』a』,『b』移動到字串的尾部,得到新字串」cdefab」:即字串迴圈左移k。要求時間複雜度為o(n),空間複雜度為o(1)。
1)思路一:逐個字元左移,將bcdef依次左移1個,再將a移到末尾;b是同樣的操作,這樣最壞時間複雜度為o(n2)。
2)思路二:先將ab,cdef分別儲存,再將ab拼接到cdef末尾,空間複雜度為o(n)。
3)思路三:
三次翻** 令」ab」 = x,」cdef」 = y;
①x翻轉 -> x的逆序x』
②y翻轉 -> y的逆序y』
③x』y』翻轉 -> yx
類似的題目:
i love u –> u love i
i翻轉,love翻轉,u翻轉 ,最後整個翻轉
**:
/************************************
功能:翻轉一句話中的詞語,eg: i love u -> u love i@athor:rly@date: 2018-3-8
*************************************/
#include #include using namespace std;
void swap(char &c1, char &c2)
void reversestr(string &str, int start, int end)
}string rotatestrofword(const string srcstr)
string srcstr = srcstr;
int start = 0;
int end = 0; //記錄字串中word在字串中的起始位置和終止位置
for (start = 0; start < srcstr.size();)
} //當遇到空格時,說明已找到乙個完整的詞
if ((end - start) > 1)
//當這個詞個數大於1時才翻轉
if (end == srcstr.size())
//若找到了尾部,則結束
while (srcstr[end] == ' ')
//繼續找下乙個詞
start = end;
}reversestr(srcstr, 0, srcstr.size() - 1); //最後整句翻轉
return srcstr;
}
每天一道演算法題之字串相加
題目描述 給定兩個字串形式的非負整數 num1 和num2 計算它們的和。注意 num1 和num2 的長度都小於 5100.num1 和num2 都只包含數字 0 9.num1 和num2 都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式。1 ...
每日演算法 重構字串
給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。若可行,輸出任意可行的結果。若不可行,返回空字串。示例 1 輸入 s aab 輸出 aba 示例 2 輸入 s aaab 輸出 注意 s 只包含小寫字母並且長度在 1,500 區間內。前面返回空的判斷就不加以贅述了,直接說後面的解法...
每天一道演算法題 迴圈移動
華為oj上的題,始終有乙個test沒過,不知道為什麼 也考慮移動次數為負值,大於10,0,10這些邊界情況了。只是一直沒有移動陣列,因為只是需要輸出嘛。include using namespace std intmain int step 0 cin step 向前移動,先輸出後m個和,再輸出前m...