日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Reverse Words in a String

發(fā)布時(shí)間:2025/5/22 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reverse Words in a String 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Problem:

Given an input string, reverse the string word by word.

For example,

Given s = "the sky is blue",

return "blue is sky the".

這個(gè)題目敘述的不夠精確,有些邊界的情況需要考慮。題目的下方給出了Clarification澄清了幾個(gè)問題,也是面試的時(shí)候需要確認(rèn)的。

第一個(gè)問題是什么構(gòu)成了一個(gè)詞(word),回答是一串不包含空格(non-space)的字符。這里需要理解non-space,應(yīng)該要包含' ', '\t', '\n'等字符,C語言中可以通過宏定義isspace來判斷。

第二個(gè)問題是詞的開頭與結(jié)尾能有空格嗎,回答是有的,但返回的結(jié)果中應(yīng)該去掉。

第三個(gè)問題是分隔每?jī)蓚€(gè)詞之間的空格能有多個(gè)嗎,回答是能,但返回結(jié)果中應(yīng)該只留下一個(gè)空格就好。

通過詢問這三個(gè)問題,題目也就清楚多了,這個(gè)題目的解決思路并不困難,就是先翻轉(zhuǎn)每個(gè)單詞,再對(duì)整個(gè)字符串翻轉(zhuǎn)就能做到翻轉(zhuǎn)每個(gè)單詞的目的,但是同時(shí)要想將單詞間的空格變?yōu)橐粋€(gè),頭尾都要去掉就要費(fèi)一番功夫。

我的解法是直接在原始的字符串上一遍掃描,從后向前翻轉(zhuǎn)單詞,同時(shí)將單詞移位到正確的位置,即每?jī)蓚€(gè)單詞之間保證只有一個(gè)空格。然后整體再翻轉(zhuǎn)一次,只有結(jié)尾處還可能有些空格,再單獨(dú)處理。代碼中使用了algorithm中的reverse來翻轉(zhuǎn)字符串,效率可能會(huì)稍差,可以自己直接用下標(biāo)操作,寫個(gè)翻轉(zhuǎn)函數(shù)。

1 void reverseWords(string &s) { 2 int len = s.length(); 3 4 // find each word iteratively and then reserve it 5 int align = len-1; 6 int start_pos, end_pos; 7 for(int i = len-1; i >= 0; --i) { 8 if(!isspace(s[i])) { 9 end_pos = i; 10 11 while(i >= 0 && !isspace(s[i])) { 12 --i; 13 } 14 start_pos = i+1; 15 16 reverse(s.begin()+start_pos, s.begin()+end_pos+1); 17 18 if(end_pos != align) { 19 for(int j = 0; j <= end_pos-start_pos; ++j) { 20 s[align-j] = s[end_pos-j]; 21 } 22 } 23 align -= (end_pos-start_pos+1); 24 if(align >= 0) { 25 s[align--]= ' '; 26 } 27 } 28 } 29 30 if(align >= 0) { 31 fill(s.begin(), s.begin()+align+1, ' '); 32 } 33 34 // reverse the whole string and trim the leading and trailing spaces 35 reverse(s.begin(), s.end()); 36 37 int i = len-1; 38 while(i >= 0 && isspace(s[i])) 39 --i; 40 s = s.substr(0, i+1); 41 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/foreverinside/p/3694630.html

總結(jié)

以上是生活随笔為你收集整理的Reverse Words in a String的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。