面試題58:翻轉字串
阿新 • • 發佈:2020-08-24
1 題目描述
牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
2 輸入
string str
3 輸出
string str
4 樣例輸入
“I am a student.”
5 樣例輸出
“student. a am I”
6 求解思路
兩次翻轉字串,第一次翻轉整個串,第二次翻轉子串。
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include "MyUtils.h" using namespace std; void Reverse(string &str, int begin, int end){ if(str.length() < 1 || begin == end) return ; while(begin < end){ char temp = str[end]; str[end] = str[begin]; str[begin] = temp; begin++; end--; } } string ReverseSentence(string str){ int length = str.length(); if(length < 1) return str; int begin = 0; int end = length - 1; // 先翻轉整個串 Reverse(str, begin, end); // 再分別翻轉裡面的串 begin = 0; end = 0; while(begin < length){ if(str[end] == ' ' || end == length){ Reverse(str, begin, end - 1); end++; begin = end; } else end++; } return str; } int main() { string str = "I am a student."; cout<<ReverseSentence(str); return 0; }