1. 程式人生 > 其它 >力扣151、翻轉字串裡的單詞

力扣151、翻轉字串裡的單詞

1、遍歷+擷取(4ms,82%;7.2MB,38%)

 1 string reverseWords(string s) {
 2       //從後面往前面遍歷
 3       int len=s.size()-1;
 4       string str;
 5       while(len>=0){
 6           int sum=0;
 7           //排除空格
 8           while(len>=0&&s[len]==' ') len--;
 9           //定位單詞並計算其長度
10           while(len>=0
&&s[len]!=' '){ 11 len--; 12 sum++; 13 } 14 if(sum) 15 str+=s.substr(len+1,sum)+" "; 16 } 17 //除掉最後一個空格 18 return str.substr(0,str.size()-1); 19 }

2、沒看懂(4ms,82%;7.2MB,38%)

 1  string reverseWords(string s) {
 2        string
s1[1000], s2; 3 int i = 0; 4 stringstream ssin(s); 5 while(ssin>>s1[i]) 6 i++; 7 for(int j = i - 1; j > 0; j--) 8 s2+=s1[j]+" "; 9 s2+=s1[0]; 10 11 return s2; 12 }

3、遍歷+擷取+翻轉(4ms,82%;7MB,57%)1 string reverseWords(string

s) {2 int len=s.size()3 int j=0;

 4     string str;
 5     //用i和j分別指向一個單詞的首尾
 6     for(int i=0;i<len;i++){
 7         j=i;
 8         //跳過單詞前的空格
 9         while(j<len&&s[j]==' ') j++;
10         //防止最後一次無效執行時多加個空格
11         if(j==len) break;
12         //使其都指向首字母
13         i=j;
14         //使其指向末尾處空格
15         while(j<len&&s[j]!=' ') j++;
16         //該函式翻轉【first,last),用於翻轉單個單詞
17         reverse(s.begin()+i,s.begin()+j);
18         str+=s.substr(i,j-i)+' ';
19         //使其都指向末尾處空格
20         i=j;
21     }
22 reverse(str.begin(),str.end()); 23 //翻轉後最後的空格到了第一位 24 return str.substr(1,str.size()); 25 }

4、過程與2類似,但原軌道操作(4ms,82%;6.9MB,69%)

 1  string reverseWords(string s) {
 2        int k = 0;
 3         for(int i = 0; i < s.size(); i++)
 4         {
 5             int j = i;
 6             //跳過單詞前的空格
 7             while(j < s.size() && s[j] == ' ') j++; 
 8             //防止最後一次無效操作後多加一個空格
 9             if(j == s.size()) break; 
10             i = j;
11             while(j < s.size() && s[j] != ' ') j++;
12             reverse(s.begin() + i, s.begin() + j);
13             //補空格
14             if(k)  s[k++] = ' '; 
15             //翻轉後的單詞從0開始填充
16             while( i < j) s[k++] = s[i++];
17         }
18         //刪除s.begin() + k到s.end()的剩餘字元
19         s.erase(s.begin() + k,s.end());
20         //end()指向最後一個元素的下一個位置
21         reverse(s.begin(),s.end());
22         return s;
23     }