作者:手机用户2502901613 | 来源:互联网 | 2023-10-10 09:29
题目: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
方法1:借助一个栈,每找到一个空格,将前面单词入栈,然后出栈组成新的句子,要注意入栈时最后剩余部分的处理以及 特殊处理""、“qwe”、" adsf"、"sdf "这几种情况先返回
方法2:网上看好多是先全部翻转,然后每个单词翻转,这里就不写代码了
代码:
class Solution { public: string ReverseSentence ( string str) { if ( str. empty ( ) || string: : npos &#61;&#61; str. find ( " " ) || str. size ( ) - 1 &#61;&#61; str. find ( " " ) || 0 &#61;&#61; str. rfind ( " " ) ) return str; stack< string> string_stack; int i&#61; 0 , start &#61; 0 ; for ( ; i< str. size ( ) ; i&#43;&#43; ) { if ( str[ i] &#61;&#61; &#39; &#39; ) { string_stack. push ( str. substr ( start, i- start) ) ; start &#61; i&#43; 1 ; } } string res; if ( start< str. size ( ) ) { res. append ( str. substr ( start, i- start) ) ; res. append ( " " ) ; } else { res. append ( " " ) ; } while ( ! string_stack. empty ( ) ) { res. append ( string_stack. top ( ) ) ; res. append ( " " ) ; string_stack. pop ( ) ; } return string ( res. begin ( ) , res. end ( ) - 1 ) ; } } ;