翻转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。
同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。
例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。
Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
规律很好找,但是如何实现那。
可以先让整体的反转,然后在让单个的单词反转
//反转前:I am a student. //整体反转:.tneduts a ma I //逐个反转单词student. a am I
// 先将整个字符串旋转,然后再将单个字符串旋转 class Solution { public: // 字符串反转, i 代表起始地址,j代表末尾地址 void Reverse(string &str, int i, int j) { char temp; while(i < j) { temp = str[i]; str[i]=str[j]; str[j]=temp; ++i; --j; } } string ReverseSentence(string str) { int len = str.size(); if (len <= 0) return ""; // 对整个字符串反转 Reverse(str, 0, len-1); int i = 0, j = 0; // i指向前面的地址,j指向后面的地址 while(i<len) { if (str[j] == ' ' || j == len) // 当遇到空格,或者字符串末尾 { Reverse(str, i, j-1); i = j+1; } j++; } return str; } };
上面的反转函数可以用调用函数
/* 上面的函数也可以换成这样 while(i < j) { swap(str[i++], str[j--]); } */