编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略


目录

字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略

耗费时间对比

T1、使用字符串切片的方法

T2、使用reversed()方法

T3、使用list和reverser()方法

T4、使用reduce方法

T5、while循环+空列表+字符串拼接

T6、利用list和字符串拼接

T7、while循环+字符串拼接

T8、利用栈的思维

T9、利用递归思想

T10、利用一行代码(for循环+字符串拼接)

T11、利用for循环+倒叙提字母+字合并符串


网友思路参考 文章Reverse a string in Python - Stack Overflow

字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略

耗费时间对比

方法 耗费时间 
T1、使用字符串切片的方法 str01: 0.004107
T2、使用reversed()方法 str02: 0.007081
T3、使用list和reverser()方法 str03: 0.006830
T4、使用reduce方法 str04: 0.202377
T5、while循环+空列表+字符串拼接 str05: 0.027280
T6、利用list和字符串拼接 str06: 0.036437
T7、while循环+字符串拼接 str07: 0.036202
T8、利用栈的思维 str08: 0.057554
T9、利用递归思想 最长!
T10、利用一行代码(for循环+字符串拼接) str10: 0.030771
T11、利用for循环+倒叙提字母+字合并符串 str11: 0.027477

T1、使用字符串切片的方法

1. import time
2. 
3. # str_temp = '123456789'
4. str_temp = '123456789'*10000
5. 
6. 
7. # T1、使用字符串切片的方法
8. STime1 = time.clock()
9. str01 = str_temp[::-1]
10. print(str01)
11. 
12. ETime1 = time.clock()
13. CostTime1=ETime1-STime1
14. print('str01:','%.6f' % CostTime1)

T2、使用reversed()方法

1. # T2、使用reversed()方法
2. STime2 = time.clock()
3. str02 = ''.join(reversed(str_temp))
4. print(str02)
5. 
6. ETime2 = time.clock()
7. CostTime2=ETime2-STime2
8. print('str02:','%.6f' % CostTime2)

T3、使用list和reverser()方法

1. # T3、使用list和reverser()方法
2. STime3 = time.clock()
3. str_temp2list = list(str_temp)
4. str_temp2list.reverse()
5. str03 = ''.join(str_temp2list)
6. print(str03)
7. 
8. ETime3 = time.clock()
9. CostTime3=ETime3-STime3
10. print('str03:','%.6f' % CostTime3)

T4、使用reduce方法

1. # T4、使用reduce方法
2. from functools import reduce
3. STime4 = time.clock()
4. str04 = reduce(lambda x,y : y+x, str_temp)
5. print(str04)
6. 
7. ETime4 = time.clock()
8. CostTime4=ETime4-STime4
9. print('str04:','%.6f' % CostTime4)

T5、while循环+空列表+字符串拼接

1. # T5、for循环+空列表+字符串拼接
2. STime5 = time.clock()
3. str05 = []
4. str_temp_len = len(str_temp)
5. while str_temp_len:
6.     str_temp_len -= 1
7.     str05.append(str_temp[str_temp_len])
8. print(''.join(str05))
9. 
10. ETime5 = time.clock()
11. CostTime5=ETime5-STime5
12. print('str05:','%.6f' % CostTime5)

T6、利用list和字符串拼接

1. # T6、利用list和字符串拼接
2. STime6 = time.clock()
3. str06 = ''
4. str_temp_len = len(str_temp)
5. for i in range(str_temp_len - 1, -1, -1):
6.     str06 += str_temp[i]
7. print(str06)
8. 
9. ETime6 = time.clock()
10. CostTime6=ETime6-STime6
11. print('str06:','%.6f' % CostTime6)

T7、while循环+字符串拼接

1. # T7、while循环+字符串拼接
2. STime7 = time.clock()
3. str07 = ''
4. str_temp_len = len(str_temp)
5. while str_temp_len:
6.     str_temp_len -= 1
7.     str07 += str_temp[str_temp_len]
8. print(str07)
9. 
10. ETime7 = time.clock()
11. CostTime7=ETime7-STime7
12. print('str07:','%.6f' % CostTime7)

T8、利用栈的思维

1. # T8、利用栈的思维
2. STime8 = time.clock()
3. str_temp2list = list(str_temp) #模拟全部入栈
4. str08 = ""
5. while len(str_temp2list)>0:
6.     str08 += str_temp2list.pop() #模拟出栈
7. print(str08)
8. 
9. ETime8 = time.clock()
10. CostTime8=ETime8-STime8
11. print('str08:','%.6f' % CostTime8)

T9、利用递归思想

1. #  T9、利用递归思想
2. def r_string(str_temp):
3. if len(str_temp) == 1:
4. return str_temp
5. return str_temp[-1] + r_string(str_temp[:-1])
6. STime9 = time.clock()
7. str09 = r_string(str_temp)
8. print(str09)
9. 
10. ETime9 = time.clock()
11. CostTime9=ETime9-STime9
12. print('str09:','%.6f' % CostTime9)

T10、利用一行代码(for循环+字符串拼接)

1. #  T10、利用一行代码(for循环+字符串拼接)
2. STime10 = time.clock()
3. str10 = ''.join(str_temp[len(str_temp) - i - 1] for i in range(len(str_temp)))
4. print(str10)
5. 
6. ETime10 = time.clock()
7. CostTime10=ETime10-STime10
8. print('str10:','%.6f' % CostTime10)

T11、利用for循环+倒叙提字母+字合并符串

1. # T11、利用for循环+倒叙提字母+字合并符串
2. STime11 = time.clock()
3. str11=''
4. for i in range(1,len(str_temp)+1):
5.     str11=str11+str_temp[-i]
6. print(str11)
7. 
8. ETime11 = time.clock()
9. CostTime11=ETime11-STime11
10. print('str11:','%.6f' % CostTime11)


相关文章
|
23天前
|
安全 Ubuntu Shell
深入解析 vsftpd 2.3.4 的笑脸漏洞及其检测方法
本文详细解析了 vsftpd 2.3.4 版本中的“笑脸漏洞”,该漏洞允许攻击者通过特定用户名和密码触发后门,获取远程代码执行权限。文章提供了漏洞概述、影响范围及一个 Python 脚本,用于检测目标服务器是否受此漏洞影响。通过连接至目标服务器并尝试登录特定用户名,脚本能够判断服务器是否存在该漏洞,并给出相应的警告信息。
145 84
|
4天前
|
数据可视化 项目管理
个人和团队都好用的年度复盘工具:看板与KPT方法解析
本文带你了解高效方法KPT复盘法(Keep、Problem、Try),结合看板工具,帮助你理清头绪,快速完成年度复盘。
35 7
个人和团队都好用的年度复盘工具:看板与KPT方法解析
|
13天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
107 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
12天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
22天前
|
存储 Java 开发者
浅析JVM方法解析、创建和链接
上一篇文章《你知道Java类是如何被加载的吗?》分析了HotSpot是如何加载Java类的,本文再来分析下Hotspot又是如何解析、创建和链接类方法的。
|
1月前
|
缓存 Java 调度
多线程编程核心:上下文切换深度解析
在现代计算机系统中,多线程编程已成为提高程序性能和响应速度的关键技术。然而,多线程编程中一个不可避免的概念就是上下文切换(Context Switching)。本文将深入探讨上下文切换的概念、原因、影响以及优化策略,帮助你在工作和学习中深入理解这一技术干货。
47 10
|
1月前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
47 8
|
1月前
|
算法 调度 开发者
多线程编程核心:上下文切换深度解析
在多线程编程中,上下文切换是一个至关重要的概念,它直接影响到程序的性能和响应速度。本文将深入探讨上下文切换的含义、原因、影响以及如何优化,帮助你在工作和学习中更好地理解和应用多线程技术。
41 4
|
1月前
|
PHP 开发者 容器
PHP命名空间深度解析:避免命名冲突与提升代码组织####
本文深入探讨了PHP中命名空间的概念、用途及最佳实践,揭示其在解决全局命名冲突、提高代码可维护性方面的重要性。通过生动实例和详尽分析,本文将帮助开发者有效利用命名空间来优化大型项目结构,确保代码的清晰与高效。 ####
30 1
|
1月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
78 3

推荐镜像

更多