1. 程式人生 > >leetcode:557 反轉字串的單詞

leetcode:557 反轉字串的單詞

題目來源:leetcode
題目描述:給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。
例如:

輸入: “Let’s take LeetCode contest”
輸出: “s’teL ekat edoCteeL tsetnoc”

這道題的測試用例很長,一般的兩個迴圈式跑不過的,以下是其中一部分測試用例,後面還有很長
在這裡插入圖片描述
常規的兩個迴圈,測試用例是跑不過的例如下面:

class Solution {
public:
string reverseWords(string s) {
        int begin=0;
        int end=0;
        while(s[begin]!='\0')
        {
            int tmp=end;
            if(s[end]==' '||s[end]=='\0')
            {   end--;
                while(begin<end)
                {
                    char t=' ';
                    t=s[begin];
                    s[begin]=s[end];
                    s[end]=t;
                    begin++;
                    end--;
                }
                end=tmp;
                end++;
                begin=end;
            }
            end++;
        }     
       return s; 
    }
};

所以我們需要採用另一種方法,用空間換時間,新開一個str,把反轉的單詞放到str中,程式碼如下:

class Solutin{
public:
string reverseWords(string s) {
    if(s.size()<=1)
        return s;
        int begin=0;
        int end=0;
        int i;
        string str;//開一個新的str
        while(1)
        {
            while(end<s.size()&&s[end]!=' ')
                end++;//找到空格就停下
            for(i=end-1;i>=begin;i--)
            {
                str+=s[i];//把該單詞的從尾到頭賦值給str
            }
                  if(end!=s.size())
            	{
                		str+=' ';//把空格賦值給str
            	}
            	else
                		break;//當end走到s的尾時跳出
            begin=end+1;//把begin指向下一個單詞的第一個位置
            end++;
        }
        return str;//返回str
        }
};

這樣這個最長的測試用例也就可以跑的過了。