【剑指offer】面试题 5:替换空格
来源:互联网 发布:淘宝店铺申请全球购 编辑:程序博客网 时间:2024/06/07 23:34
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
时间限制:1秒 空间限制:32768K 热度指数:283203
思路:第一种,简单粗暴,直接遍历,从前往后替换。遇到空格,就替换,同时将后面的所有字符都往后移;
缺点:每遇到一次空格都要移动后面的所有字符串,很多字符被移动多次,效率低下。
第二种,先遍历,得出字符串的基本信息——长度、空格个数。计算出替换后的字符串的长度,从后往前去替换,
这样就可以避免字符的多次移动。
第三种,用Python语言来实现,利用replace函数来实现,一行代码搞定。
参考代码:
1、C++版本
class Solution {public: // length 为字符串组 str 的总长度 void replaceSpace(char *str,int length) { if (str == nullptr || length <= 0) { return; } int originalLength = 0; // 原始字符串的长度 int numberOfBlank = 0; // 空格的个数 int i = 0; while (str[i] != '\0') { ++originalLength; if (str[i] == ' ') { ++numberOfBlank; } i++; } /* newLength 为把空格替换成 '%20' 之后的长度*/ int newLength = originalLength + numberOfBlank * 2; if (newLength > length) { return; } int indexOfOriginal = originalLength; // 因为字符串的结尾是 '\0', 所以字符串的长度除了字符长度还要加上'\0'结尾的字符 int indexOfNew = newLength; while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) { if (str[indexOfOriginal] == ' ') { str[indexOfNew --] = '0'; str[indexOfNew --] = '2'; str[indexOfNew --] = '%'; } else { str[indexOfNew --] = str[indexOfOriginal]; } -- indexOfOriginal; } }};
2、Python版本
# -*- coding:utf-8 -*-class Solution: # s 源字符串 def replaceSpace(self, s): # write code here s = s.replace(' ', '%20') return s
总结:
1、C++执行效率高,占用内存小;(运行时间:1ms 占用内存:496k)
2、Python实现简单,代码量少; (运行时间:36ms 占用内存:5760k)
3、Python简直就是流氓,一行代码搞定所有。好想用这个做面试题,怎么办?哈哈
阅读全文
0 0
- 剑指offer--面试题5:替换空格
- 【剑指offer】面试题 5:替换空格
- 【剑指offer】面试题5:替换空格
- 剑指offer 面试题5: 替换空格
- 剑指offer-->面试题4 替换空格
- 《剑指offer》面试题4 替换空格
- 【剑指offer】面试题4:替换空格
- 【剑指offer】面试题4替换空格
- 剑指offer 面试题4 替换空格
- 剑指Offer:面试题4 替换空格
- 剑指offer-面试题4-替换空格
- 《剑指Offer》面试题4:替换空格
- 【剑指offer】 面试题4: 替换空格
- 剑指offer 面试题4---替换空格
- 剑指offer面试题4-- 替换空格
- 《剑指Offer》面试题:替换空格
- 剑指Offer面试题2:替换空格
- 【剑指offer】面试题4:替换空格
- Android Studio-断点调试-no executable code found at line android
- 第十七周算法设计与分析:Minesweeper
- 两年Java程序员面试经
- Spring Boot如何解决Mysql断连问题
- 数据结构(三)队列(一)链表实现
- 【剑指offer】面试题 5:替换空格
- Android TextView设置图片技巧
- time sys
- android Could not download manifest-merger.jar
- 第一行代码 第二章 Activity
- JavaScript笔记
- tomcat启动web项目报错
- Android 图片自动切换
- IDEA导入Spring源码(Gradle导入)