今天遇到一道题目是实现一个反转字符串的函数,具体如下:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例 1:

输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

自己动手操作了一下,大概有如下几种方式

方法1

如果不考虑题目中所说的“原地修改输入数组”,可以借助一个中间列表来实现

从列表的尾部向前遍历,可以通过如下2种方式定义索引

def reverseString_1(self, s):"""思路:借助一个中间变量temp,然后从s的尾部提取,把元素追加到temp中:param s::return:"""temp = []for i in range(len(s)):temp.append(s[len(s)-1-i])return tempdef reverseString_2(self, s):"""思路:和方法4一样,不过换个实现方式(和第8题方法2用到的倒序循环一样):param s::return:"""temp = []for i in range(len(s)-1, -1, -1): # range中的表示索引范围,len(s)-1表示遍历的第一个元素(也就是从最后一个元素开始遍历);# 第一个-1表示最后一个位置,不过由于遍历范围右边不闭合,所以这里其实最终遍历的是第一个元素;# 第二个-1表示步长,每次-1,即从后往前遍历temp.append(s[i])return temp

方法2

思考一下:

反转字符串其实可以转换为“首尾元素串互换”,如:第1位和倒数第1位互换、第2位和倒数第2位互换、第3位和倒数第3位互换

[1,2,3,4,5,6]
[6,5,4,3,2,1]

这样的话,可以定义2个指针,一个从首位遍历往后遍历,一个从末尾往前遍历;
然后每次遍历都交换2个位置的元素,一直遍历到中间元素;

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def reverseString(self, s):""":type s: List[str]:rtype: None Do not return anything, modify s in-place instead."""i = 0  # 第一个指针,从首部遍历j = len(s) - 1  # 第二个指针,从尾部遍历while j > i: # 如果j>i就一直循环,直到2个指针相遇s[i], s[j] = s[j], s[i]  # 交换2个位置的元素i += 1j -= 1return s

方法3

这个方法比较绕,而且在提交时,由于超时导致并未通过(系统给出的数组太长导致),不过自己测试时给了几个数组,也能正常倒序输出

思路如下:既然是倒序输出,可以把第1个和第2个元素互换,然后第2个和第3个互换…直到把第1个元素挪到了最后的位置;

但是此时还未结束,这只是把第1个元素挪到了最后,还需要重复上述步骤,再把原先的第2个元素(现在的第1个元素)挪到倒数第2个位置(注意:此时的最后一个元素不能动)

按照上述步骤,把所有元素都挪动一遍,就完成了

def reverseString(self, s):"""思路::type s: List[str]:rtype: None Do not return anything, modify s in-place instead."""n = 0while n < len(s):i = 0for j in range(1, len(s)-n):s[i], s[j] = s[j], s[i]i += 1n += 1return s

方法4

利用切片来实现倒序输出

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def reverseString(self, s):"""思路:切片s[::-1]表示反转s中的元素s[:]表示数组中所有子模块s[:]=s[::-1]表示将原数组反转后赋值给s中每一个对应的位置s=s[::-1]表示将s反转后赋值给新的对象s,与题意原地修改不符:param s::return:"""s[:] = s[::-1]return s

方法5

使用reverse()方法,它会对原列表进行反向排序(注意:reverse只对list有效)

def reverseString_6(self, s):""":param s::return:"""s.reverse()return s

不过reverse()方法的源码,会发现它其实就是利用的切片,如下

5种方法实现“反转字符串”相关推荐

  1. 【C】C语言三种方法判别指定字符串是否被另一字符串包含

    文章目录 C语言两种方法判别指定字符串是否被另一字符串包含 一.方案一 1.代码 2.结果 二.方案二 1.代码 2.结果 三.方案三 1.代码 2.结果 四.参考链接 C语言两种方法判别指定字符串是 ...

  2. access 合并多行字符串_八种方法玩转字符串合并,这篇文章全都给你讲明白!...

    在日常工作过程中,经常会遇到要把一串字符拼接到一起的情况. 你是不是还一直在用"&"连接符来合并字符串呢?当遇到很多个字符串需要合并的时候,这种方法又费时又费力,那有没有其 ...

  3. 4 种方法!检查字符串是否为合法的日期格式

    哈喽大家好,今天咱们来讲一下,Java 中如何检查一个字符串是否是合法的日期格式? 为什么要检查时间格式? 后端接口在接收数据的时候,都需要进行检查.检查全部通过后,才能够执行业务逻辑.对于时间格式, ...

  4. JS数组转字符串(3种方法)和字符串转数组(2种)

    一:数组转字符串(3种方法) 同样是数组转字符串,toString(),toLocaleString(),join(),join(',')的区别是什么? JavaScript 允许数组与字符串之间相互 ...

  5. 两种方法判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言)...

    例如:给定s1 = AABCD和s2 = BCDAA,返回1 给定s1 = abcd和s2 = ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 第一种: ...

  6. 在C++中可以用3种方法访问一个字符串

    用字符数组存放一个字符串 [例6.10]定义一个字符数组并初始化,然后输出其中的字符串. #include <iostream> using namespace std; int main ...

  7. 在JavaScript中反转字符串的三种方法

    This article is based on Free Code Camp Basic Algorithm Scripting "Reverse a String" 本文基于F ...

  8. python字符串出栈方法_Python 实现字符串反转的9种方法

    在做leetcode的试题中,做到反转整数,就涉及到字符串反转,为了尽可能可以写出更多的方法,于是写下这篇文章 样例:如 a='123456789' 反转成 a='987654321' 第一种方法:使 ...

  9. python怎么将字符串逆序_python中如何把一个字符串顺序逆序反转的几种方法?

    如 a='123456789' 反转成 a='987654321' 第一种方法:使用字符串切片 >>> a='123456789' >>> a = a[::-1] ...

最新文章

  1. python编写用户输入的是q么代码_Python课 #01号作业
  2. 用 go 写 WebAssembly入门
  3. dart参数传方法_为 JavaScript 开发人员准备的 Dart 参考教程
  4. 【Groovy】map 集合 ( map 集合操作符重载 | - 操作符重载 | 代码示例 )
  5. python用代码表示5与2的整除_Python教程5:Python 2.x和Python 3.x的区别有哪些?
  6. IOS Core Image之二
  7. 15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)
  8. 使用 Python 切割图片
  9. python心理学实验程序_心理学实验程序编程(python)
  10. jupyter新建文件_Jupyter渲染网页的3种方式
  11. 实现备份轮换方案的备份实用程序(C#中的开源Windows窗体应用程序)
  12. [排版题] 例4.1 输出梯形
  13. Castle.Aop.Autofac
  14. 单片微型计算机第三版课后习题答案,单片微型计算机原理与应用_课后习题答案_山东理工.docx...
  15. 职称计算机考试有哪些题,职称计算机考试题库(-套有答案).doc
  16. python中xlsxwriter模块_python xlsxwriter模块的使用
  17. 百度网站收录批量查询 介绍百度网站收录批量查询3种方式
  18. python绘制三重积分图像_三重积分-图解高等数学13 | 文艺数学君
  19. Android实现百度地图定位(墨雪亲测)
  20. 逍遥android模拟器设置,逍遥安卓模拟器更改分辨率的具体操作方法

热门文章

  1. 微信小程序中用setData修改一个对象的属性值
  2. Linux集群和自动化维3.1 Python语言的应用领域
  3. 基于zxing生成与解析二维码、条形码
  4. 浏览器窗口的高度和宽度
  5. 终于要考网络架构师了
  6. ad 卡尔曼_对Kalman(卡尔曼)滤波器的理解
  7. python中remove用法_Python 列表 remove() 使用方法及示例
  8. 自由自在意式手工冰淇淋 果香浪漫的甜蜜
  9. ABAP--如何快速从BSEG读取数据
  10. SAP FI 会计凭证过账bapi BAPI_ACC_DOCUMENT_POST