問題1:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。爲簡單起見,標點符號和普通字母一樣處理。例如輸入字符串"I am a student. ",則輸出"student. a am I"。
思路:翻轉整個句子,然後翻轉每個單詞。
代碼:
class Solution {
public:
string ReverseSentence(string str) {
if(str.empty())
return str;
reverse(str.begin(),str.end());
string::iterator iter1=str.begin();
string::iterator iter2=str.begin();
while(iter1!=str.end())
{
if(*iter1==' ')
{
iter1++;
iter2++;
}
else if(*iter2==' ')
{
// why not reverse(iter1,--iter2); Because range is [first,last).
reverse(iter1,iter2);
iter1=++iter2;
}
else if(iter2==str.end())
{
reverse(iter1,iter2);
break;
}
else
{
iter2++;
}
}
return str;
}
};
複雜度分析:時間複雜度爲O(n),空間複雜度爲O(1)。
問題2:字符串的左旋轉操作是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操作的功能。比如,輸入字符串"abcdefg"和數字2,該函數將返回左旋轉兩位得到的結果"cdefgab"。
思路:基於上述問題的解決方法(翻轉字符串)
首先,將字符串分爲兩部分,然後,兩部分分別進行翻轉,最後,將整個字符串進行翻轉。
複雜度分析:時間複雜度爲O(n),空間複雜度爲O(1)。