描述
给定一个字符串,逐个翻转字符串中的每个单词。
说明
- 单词的构成:无空格字母构成一个单词
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
样例
给出s = "the sky is blue",返回"blue is sky the"
一、python实现
class Solution:
"""
@param: s: A string
@return: A string
"""
def reverseWords(self, s):
return ' '.join(reversed(s.strip().split()))
只需一句简单地语句实现,是不是很牛逼
分析如下:
1、str.join(iter)————join()函数
在iter变量中,除最后元素外每一个元素后增加一个str作为分隔。
例如:
记忆方法:str.join(元组、列表、字典、字符串),之后生成的只能是字符串
故很多时候生成元组、列表、字典后,可以使用join()来转化为字符串
2、reversed()函数
reversed函数返回一个反转的迭代器:reversed(seq ) ———— seq是要转换的序列,可以使tuple、string、list或者range
reversed()的返回值是一个把序列值经过反转之后的迭代器,故需要通过遍历或者list、tuple、next()等方法,获得反转后的值
例如:
3、strip()函数
用于移除字符串头尾指定的字符(默认为空格或者换行符)或字符序列。
该方法只能删除开头或者结尾点的字符,不能删除中间部分的字符
4、split()函数
str.split(str = "", num = string.count(str))
str:分隔符,默认为所有的空字符:包括空格、换行(\n)、制表符(\t)等
num:分割次数,默认为-1,即分割所有。
总结:通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num+1个字符串
返回值:分割后的字符串列表
二、C++实现
class Solution {
public:
/*
* @param s: A string
* @return: A string
*/
string reverseWords(string &s)
{
string cur = "";
stack<string> sta; //定义stack对象
int len = s.length();
for (int i = 0; i < len; ++i)
{
if (s[i] == ' ' && cur == "")
;
else if (s[i] == ' ' && cur != "")
{
sta.push(cur);
cur = "";
}
else
{
cur += s[i];
}
}
if (cur != "") sta.push(cur);
cur = "";
while(! sta.empty())
{
string temp = sta.top();
sta.pop();
cur += temp;
if (! sta.empty()) cur += " ";
}
return cur;
}
};
(一)、stack的说明
C++ 的 stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO)
使用该容器时需要包含#include<stack>头文件;
定义stack对象的示例代码如下
stack<int>s1;
stack<string>s2;
stack的基本操作有
1、入栈:如s.push(x)
2、出栈:如 s.pop().注意:出栈操作只是删除栈顶的元素,并不返回该元素
3、访问栈顶:如s.top()
4、判断栈空:如s.empty().当栈空时返回true
5、访问栈中的元素个个数:如s.size()