LeetCode012 : 反转字符串

一、写在前面

LeetCode 第十一题字符串相乘传输门:LeetCode011 : 字符串相乘
今天给大家分享的是LeetCode 数组与字符串 第十二题:反转字符串,为面试而生,期待你的加入。
“Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .”

二、今日题目

编写一个函数,其作用是将输入的字符串反转过来。

输入: "hello"
输出: "olleh"

输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"

三、 分析

这个题目,看到第一眼,太简单了,应该是刷到目前为止最简单的一题,完全对字符串的一个遍历,重排。
正确思想的思路分析:
LeetCode012 : 反转字符串_第1张图片

四、解题

  • 捷径的方法:
    一行代码
class Solution(object):
	def reverseString(self, s):
		"""
		:type s: str
		:rtype: str
		"""
		return s[::-1]

切片操作,前一篇Python小知识 | 这些技能你不会?(一)有较详细介绍切片操作。
两行代码
(1)reduce函数

class Solution(object):
	def reverseString(self, s):
		"""
		:type s: str
		:rtype: str
		"""
		from functools import reduce
		return reduce(lambda x,y:y+x,s)

函数介绍:reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

(2)reversed函数

class Solution(object):
	def reverseString(self, s):
		"""
		:type s: str
		:rtype: str
		"""
		s = list(s)
		return "".join(reversed(s))

函数介绍:reversed 函数返回一个反转的迭代器。
对一个可迭代对象就行反转,比如列表、集合等,返回值也为一个迭代对象,这里先把字符串转换成列表,然后调用reversed函数,最后用join函数把列表迭代连接。

  • 正常思想
    遍历,替换值,思路已经在分析里给出
    时间复杂度:O(n^2)
class Solution(object):
	def reverseString(self, s):
		"""
		:type s: str
		:rtype: str
		"""
		result = list(s)
		for i in range(len(result)//2):
			temp = result[len(result)-i-1]
			result[len(result)-i-1] = result[i]
			result[i] = temp
		return ''.join(result)
  • 提交结果
    LeetCode012 : 反转字符串_第2张图片

测试数据:476组
运行时间:48ms
击败人百分比:18.15%

虽然beat的人不多,但我有想法,我骄傲啊~
没有,其实上面的一行、两行代码解决问题超级方便,也算小技能了。

五、疑惑

今天,想谈谈学习,不知道大家有没有试过一个人学习,我试过,从大一到大二,几乎一个人,当然我很喜欢帮人解决问题,比如大一大二实训的时候,几乎和班上一半的人我都或多或少的交流过,所以学习上,还算可以,但学Python,我是我们班,甚至我们院也是第一第二人了,少有人学,大家都在啃javaweb,前端,小程序等等,一个人真的太难了,遇到问题想找个人讨论都没有,还好我遇到了李老师,对我帮助特别大,加入实验室有地方学习,指导我学习方向,监督我学习,同时刷leetcode也很幸运,我遇到了光城学长,在思想、学历都要比我高很多的学长,给我很多建议,同时刷题路上我们也一直在坚持,交流思想,这也是我到现在还没放弃的原因,我想的是:有一天,我把leetcode刷200、300、400道题,思想、能力上有很大提升后,我想写一本书,刷题的、励志的、理论知识的,等我公众号有了几百篇原创,等我看完几十本书籍,等我考完研,我想,我可以,加油大家,任何时候,不要放弃,除非你找到了一条更好的路,你得确保,那的确是条了不起的路。

六、结语

上面提到的光城学长,现在研一,个人公众号:光城,大家可以关注一波。
另外加我微信:zs820553471,备注:leetcode,加入专门的leetcode刷题交流群。
坚持 and 努力 : 终有所获。

欢迎大家关注微信公众号:极简XksA,获取Python/Java/前端等学习资源!

极简XksA

你可能感兴趣的:(Python,LeetCode,LeetCode算法刷题)