`
eriol
  • 浏览: 402811 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

反转字符串的优化方法

 
阅读更多

思路: 对变量交换进行优化,不适用额外的中间变量。

 

解法一:使用异或操作

 

char* strrev1(const char* str) {
       char* tmp = new char[strlen(str) + 1];
       strcpy(tmp,str);
       char* ret = tmp;
       char* p = tmp + strlen(str) - 1;
       while (p > tmp) {
              *p ^= *tmp;
              *tmp ^= *p;              
              *p ^= *tmp;
              --p;
              ++tmp;
       }
       return ret;
}

 

解法二:使用加减法

 

char* strrev2(const char* str) {
       char* tmp = new char[strlen(str) + 1];
       strcpy(tmp,str);
       char* ret = tmp;
       char* p = tmp + strlen(str) - 1;
       while (p > tmp) {
              *p = *p + *tmp;
              *tmp = *p - *tmp;
              *p = *p - *tmp;
              --p;
              ++tmp;
       }
       return ret;
}

 

方法二对于较大的整数相加可能会溢出

分享到:
评论
2 楼 eriol 2011-10-02  
chriszeng87 写道
上面和下面的代码是一样的?

就是异或和加法的区别
1 楼 chriszeng87 2011-10-02  
上面和下面的代码是一样的?

相关推荐

    十套数据结构试题(卷)与答案解析.doc

    例如,第1题要求实现一个字符串匹配算法,考察了字符串匹配的实现和优化方法。第4题则要求设计一个文本处理算法,考察了文本处理的实现和优化方法。 数据结构试卷(八) 本卷主要考察了数组和链表的数据结构。例如...

    最长回文子串(dp)1

    例如,我们可以使用 `substr` 方法来提取子串,使用 `size` 方法来获取字符串的长度。 6. DP 算法的时间和空间复杂度 DP 算法的时间复杂度通常是 O(n^2),其中 n 是输入字符串的长度。这是因为我们需要遍历输入...

    2022年JAVA面试题华为IBM.doc

    2. 字符串操作:可以使用 Java 的 StringBuilder 或 StringBuffer 类来实现字符串的反转和替代操作。 3. 数据类型之间的转换:可以使用 Java 的 parseXX() 方法将字符串转换为数字,例如 parseInt()、parseDouble() ...

    lrucacheleetcode-leetcode-oj:LeetcodeOJ解决方案

    反转字符串中的单词 评估反向波兰表示法 线上的最大点数 排序列表 插入排序列表 LRU缓存 二叉树后序遍历 二叉树先序遍历 重新排序列表 链表周期 II 链表循环 断字二 断字 使用随机指针复制列表 单号二 单号 糖果 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例049 用数组反转字符串 60 3.3 数组排序与查询 61 实例050 使用选择排序法 61 实例051 使用冒泡排序法 62 实例052 使用快速排序法 64 实例053 使用直接插入法 65 实例054 使用sort方法对数组进行排序 67 实例055 ...

    delphi 开发经验技巧宝典源码

    0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的汉字或句子 118 0183 指定符号分割字符串 119 0184 如何使用随机密码和字符串 120 第6章 日期和时间 ...

    delphi 开发经验技巧宝典源码06

    0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的汉字或句子 118 0183 指定符号分割字符串 119 0184 如何使用随机密码和字符串 120 第6章 日期和时间 ...

    千方百计笔试题大全

    215、写一个方法,实现字符串的反转,如:输入abc,输出cba 53 216、数据类型之间的转换 53 217、如何取得年月日,小时分秒 53 218、如何取得从1970年到现在的毫秒数 53 219、如何格式化日期 53 220、文件和目录(I/...

    java面试宝典

    215、写一个方法,实现字符串的反转,如:输入abc,输出cba 53 216、数据类型之间的转换 53 217、如何取得年月日,小时分秒 53 218、如何取得从1970年到现在的毫秒数 53 219、如何格式化日期 53 220、文件和目录(I/...

    使用 GPU 加速进行数值拉普拉斯变换反演的 Weeks 方法:使用 GPU 加速进行数值拉普拉斯变换反演的 Weeks 方法的实现。-matlab开发

    它允许用户输入拉普拉斯空间函数 F(s) 以作为字符串和反演时间序列进行反演,以获得近似的 f(t) 值。 可选输入是每次的相对误差容限(5% 为 0.05)以及方法参数的搜索算法选择。 包装后的代码将优化 f(t) 近似值,...

    C#编程经验技巧宝典

    76 <br>0111 计算字符串中子字符串出现的次数 76 <br>0112 获得字符串中大写字母的个数 77 <br>0113 获得某字符在字符串中最后出现的位置 78 <br>0114 如何找出字符串中某一字符的所有位置 78...

    自动化测试面试题总结.docx

    1,字符串反转的7种方法 2,new 和 _init_ 3,不使用中间变量交换两个变量的值 4,python四大内置高阶函数 5,python带颜色输出 6,python *args,**kargs用法 7,python常用模块 8,python多线程 9,python发送邮件 10,...

    java面试题

    写一个方法,实现字符串的反转,如:输入abc,输出cba 119 84.11. 请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来. 119 84.12. 请写一个java程序实现线程连接池功能? 122 84.13. 编一...

    超实用的jQuery代码段

    11.19 如何构建最优化的字符串 11.20 使用jQuery产生GUID值 11.21 使用jQuery实现聚合函数 11.22 用jQuery打印网页的特定区域 11.23 禁止表单被提交 11.24 使用delay()延迟执行动画 11.25 在网页上运行本地程序的...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    创建了几个字符串对象 30 【基础】接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class) 30 【基础】一个".java"源文件中是否可以包含多个类(不是内部类...

Global site tag (gtag.js) - Google Analytics