【LC_Lesson1】--字符串反转练习

LeetCode算法练习题目一: 给定一个字符串,要求将该字符串反转后输出

努力学习,天天向上。借助LeetCode的题目,练习编码能力,数据结构,以及C++和Python的编码能力。

 

一. 算法实现

解法一: 首尾互换位置

(重点:关注到不同方法的时间复杂度,空间复杂度,以及一种评测算法效率的实现方式)

比较好的方式,首位交换位置

C++实现方式如下:

 1 # include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Solution{
 6     public:
 7         void reverseString(string str);
 8 };
 9 
10 void Solution::reverseString(string str)
11 {
12     int i;
13     int j = str.length()-1;
14     unsigned char temp;
15     while(i < j)
16     {
17         temp = str[i];
18         str[i] = str[j];
19         str[j] = temp;
20         i++;j--;
21     }
22     for(i=0;i<str.length();i++)
23         cout << str[i];
24     cout << endl;
25 }
26 
27 int main(void)
28 {
29     Solution str;
30     str.reverseString("hello,wwz");
31     return 0;
32 }

结果如下:

         

python实现方式:

 1 def ReverseSting1(list_string):
 2     length = len(list_string);
 3     i = 0;
 4     j = length - 1;
 5     while i < j:
 6         temp = list_string[j];
 7         list_string[j] = list_string[i];
 8         list_string[i] = temp;
 9         i += 1;
10         j -= 1;
11     print(list_string)
12 
13 
14 string = 'abcdefghijklmn'
15 list_string = list(string)
16 ReverseSting1(list_string)

结果如下:

        

 

 

 注意:python中的字符串是只读属性,因此为了方便修改,将其转换成列表是一个不错的选择。

 

解法二: 暴力执行

最简单的方式,就是暴力执行,将整个数据包遍历一遍。如果有n个数据,因此需要执行n次,时间复杂度就是很直观的O(n),代码就不写了,比较简答 

 

二.  效率分析

首尾交换

假如有n个元素,由于首尾同时遍历扫描,因此将会执行n/2次运算,可算作时间复杂度为O(n/2),实际上没有这种说法,对于同等量级的运算更多都会表示为O(n)

暴力执行

前文已经描述,方案简单,逻辑简单,就是只管的O(n)

 

对比分析预测

针对首尾交换的n/2次运算(时间为T1),以及暴力法的n次运算(时间为T2),按理说执行时间应该几乎一致,也就是T1 = 1/2 * T2 ,但是由于首尾交换每次执行运算量稍多一些,所以时间应为T1 > 1/2 * T2。

下面我们实际上机验证,再次也给出一种测试算法效率的方法:

(未完待续)

《C++编程实例100篇》是一本深入实践、极具价值的编程教程,它针对C++编程语言提供了丰富的实例,旨在帮助读者更好地理解和掌握C++的各项特性与编程技巧。这本书的经典之处在于它将理论与实践相结合,通过100个精心设计的编程实例,覆盖了C++的各个核心领域,包括基础语法、面向对象编程、模板、异常处理、STL(标准模板库)等。 我们来探讨C++的基础语法。C++是C语言的增强版,它保留了C语言的高效性和灵活性,并引入了类、对象和继承等面向对象编程概念。基础语法包括变量声明、数据类型、运算符、控制结构(如if语句、for循环、while循环)、函数的定义和调用等。在实例中,你可能会遇到如何编写简单的程序,如计算两个数的和,或者实现一个简单的猜数字游戏。 C++的面向对象编程是其一大特色。通过类和对象,你可以构建复杂的软件系统。类是对象的蓝图,它定义了对象的属性和行为。实例化一个类,就是创建一个具体的对象。继承允许你创建新的类,这些类从现有的类派生,共享其属性和方法,同时可以添加新的功能。多态性是面向对象的另一个关键特性,它使得不同类型的对象可以对同一消息作出不同的响应。这些概念在实例中会以各种形式展现,例如设计一个图形界面的类层次,或实现一个简单的模拟游戏。 接下来是模板,C++的模板功能让代码更加通用,可以处理不同类型的数据。模板分为函数模板和类模板,前者可以创建泛型函数,后者可以创建泛型类。通过模板,你可以编写出高效且灵活的代码,比如实现一个通用的排序算法。 异常处理是C++中用于处理程序运行时错误的机制。当程序出现异常情况时,可以抛出一个异常,然后在适当的点捕获并处理这个异常。这使得代码能够优雅地处理错误,而不是让程序崩溃。实例中可能会有涉及文件操作或网络通信时可能出现的异常处理示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值