557. Reverse Words in a String III

第一版:
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        result=s.split(" ")
        output=list()
        for n in result:
            output.append(n[::-1])
        return " ".join(output)

第二版:
class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        result=s.split(" ")
        j=0
        for n in result:
            result[j]=n[::-1]
            j+=1
        return " ".join(result)

第二版的速度快了很多,超过了70%多的人,相比第一版,没有进行append操作,只是单纯的重新赋值。

注意不要试图直接在for循环通过n来修改正在循环的list,即这种代码:n=n[::-1]类似,因为n只是一个新变量而已,和list无关。

class Solution(object): def reverseWords(self, s): """ :type s: str :rtype: str """ return ' '.join(s.split()[::-1])[::-1]

这是最快的代码,对于输入:"Let's take LeetCode contest"来说
 return " ".join(s.split(" ")[::-1])会输出"contest LeetCode take Let's"
然后再进行[::-1]的操作,就会完全反转啦!!!

有一丢丢trick!先是用str的split函数以空格为分隔符,将s分为四个str存到list里面,然后直接反转,就以单词为单位翻转了顺序,然后再次反转,就以字母为单位翻转了顺序,神奇!

注:来源于http://www.cnblogs.com/hjhsysu/p/5700347.html
split()函数
语法:str.split(str="",num=string.count(str))[n]
参数说明:
str:表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
[n]:表示选取第n个分片
注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略

string = "www.gziscas.com.cn"
1.以'.'为分隔符
print(string.split('.'))
['www', 'gziscas', 'com', 'cn']

2.分割两次
print(string.split('.',2))
['www', 'gziscas', 'com.cn']

3.分割两次,并取序列为1的项
print(string.split('.',2)[1])
gziscas

4.分割两次,并把分割后的三个部分保存到三个文件
u1, u2, u3 =string.split('.',2)
print(u1)—— www
print(u2)—— gziscas
print(u3) ——com.cn

join有点类似于split的反向操作,eg.
str.join(sequence)
以下实例展示了join()的使用方法:
#!/usr/bin/python

str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );
以上实例输出结果如下:
a-b-c

评论

此博客中的热门博文

225 Implement Stack using Queues

232. Implement Queue using Stacks

20. Valid Parentheses