【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。

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

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值