猿问

颠倒字符串中单词的顺序

颠倒字符串中单词的顺序

我有这个string s1 = "My name is X Y Z"我想把单词的顺序颠倒一下s1 = "Z Y X is name My".

我可以使用一个额外的数组来完成它。我想了很难,但是否有可能在不使用额外数据结构的情况下,在时间复杂度为O(N)的情况下,在内部完成此操作?


慕容3067478
浏览 811回答 3
3回答

跃然一笑

反转整个字符串,然后反转每个单词的字母。在第一次传递之后,字符串将是s1 = "Z Y X si eman yM"在第二关之后s1 = "Z Y X is name My"

墨色风雨

扭转字符串,然后,在第二次,反转每个单词.。在c#中,完全就位,不需要额外的数组:static&nbsp;char[]&nbsp;ReverseAllWords(char[]&nbsp;in_text){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lindex&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;rindex&nbsp;=&nbsp;in_text.Length&nbsp;-&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rindex&nbsp;>&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//reverse&nbsp;complete&nbsp;phrase &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_text&nbsp;=&nbsp;ReverseString(in_text,&nbsp;0,&nbsp;rindex); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//reverse&nbsp;each&nbsp;word&nbsp;in&nbsp;resultant&nbsp;reversed&nbsp;phrase &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(rindex&nbsp;=&nbsp;0;&nbsp;rindex&nbsp;<=&nbsp;in_text.Length;&nbsp;rindex++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rindex&nbsp;==&nbsp;in_text.Length&nbsp;||&nbsp;in_text[rindex]&nbsp;==&nbsp;'&nbsp;') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_text&nbsp;=&nbsp;ReverseString(in_text,&nbsp;lindex,&nbsp;rindex&nbsp;-&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lindex&nbsp;=&nbsp;rindex&nbsp;+&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;in_text;}static&nbsp;char[]&nbsp;ReverseString(char[]&nbsp;intext,&nbsp;int&nbsp;lindex,&nbsp;int&nbsp;rindex){ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;tempc; &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(lindex&nbsp;<&nbsp;rindex) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempc&nbsp;=&nbsp;intext[lindex]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intext[lindex++]&nbsp;=&nbsp;intext[rindex]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intext[rindex--]&nbsp;=&nbsp;tempc; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;intext;}

波斯汪

Not&nbsp;exactly&nbsp;in&nbsp;place,&nbsp;but&nbsp;anyway:&nbsp;Python: >>>&nbsp;a&nbsp;=&nbsp;"These&nbsp;pretzels&nbsp;are&nbsp;making&nbsp;me&nbsp;thirsty" >>>&nbsp;"&nbsp;".join(a.split()[::-1]) 'thirsty&nbsp;me&nbsp;making&nbsp;are&nbsp;pretzels&nbsp;These'
随时随地看视频慕课网APP
我要回答