【程序员面试金典】面试题 01.03. URL化

题目

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例1:

输入:"Mr John Smith    ", 13
输出:"Mr%20John%20Smith"

示例2:

输入:"               ", 5
输出:"%20%20%20%20%20"

提示:
字符串长度在[0, 500000]范围内。

思路:双指针

【剑指Offer】面试题05.替换空格

代码

class Solution {
public:
    string replaceSpaces(string S, int length) {
        if (S.empty()) return S;
        int cnt = 0;
        for (int i = 0; i < length; ++i) {
            if (S[i] == ' ') ++cnt;
        }
        int newLen = length + cnt * 2, j = newLen - 1;
        for (int i = length - 1; i >= 0 && i != j; --i) {
            if (S[i] == ' ') {
                S[j--] = '0';
                S[j--] = '2';
                S[j--] = '%';
            } else {
                S[j--] = S[i];
            }
        }
        S[newLen] = '\0';
        return S;
    }
};

原文地址:https://www.cnblogs.com/galaxy-hao/p/12315104.html

时间: 2024-11-03 23:12:01

【程序员面试金典】面试题 01.03. URL化的相关文章

程序员面试金典-面试题 01.01. 判定字符是否唯一

题目: https://leetcode-cn.com/problems/is-unique-lcci/ 实现一个算法,确定一个字符串 s 的所有字符是否全都不同. 示例 1: 输入: s = "leetcode"输出: false 示例 2: 输入: s = "abc"输出: true限制: 0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分. 分析: 哈希做法,开辟数组,统计对应位置的字符出现数量,遍历字符串,当数量为1时,表示

程序员面试金典-面试题 01.06. 字符串压缩

题目: https://leetcode-cn.com/problems/compress-string-lcci/ 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串aabcccccaaa会变为a2b1c5a3.若“压缩”后的字符串没有变短,则返回原先的字符串.你可以假设字符串中只包含大小写英文字母(a至z). 示例1: 输入:"aabcccccaaa" 输出:"a2b1c5a3"示例2: 输入:"abbccd&qu

程序员面试金典-面试题 02.04. 分割链表

题目: 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前.如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示).分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间. 示例: 输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8 分析: 可以新建两个链表存储小于x的节点和大于等于x的节点,然后再将

程序员面试金典-面试题 04.02. 最小高度树

题目: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 示例:给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3   9 /     / -10  5 分析: 因为数组中元素已经有序,我们可以将数组中最中间的元素作为根节点,然后递归构建二分搜索树,当前结点的左子树由中间元素左边的的元素构成,右子树则由右边元素,递归构建即可. 程序: /**

程序员面试金典-面试题 04.05. 合法二叉搜索树

题目: https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/ 实现一个函数,检查一棵二叉树是否为二叉搜索树. 示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4  / \  3 6输出: false解释: 输入为: [5,1,4,null,null,3,6].  根节点的值为 5 ,但是其右子节点值为 4 . 分析: 两种做法,利用二分搜索树中序遍历的性质,节点val值的顺序应该是严格

程序员面试金典-面试题 16.05. 阶乘尾数

题目: 设计一个算法,算出 n 阶乘有多少个尾随零. 示例 1: 输入: 3输出: 0解释: 3! = 6, 尾数中没有零.示例 2: 输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) . 分析: 计算阶乘后0的个数实际上就是在数5,一个5和一个偶数相乘就会产生一个0,而25会产生两个0,所以对于n大于0时,数它的5有多少个,除以5,如果还大于0就继续除以5,也就是在数25有几个,反复执行下去. 程序: class Soluti

程序员面试金典-面试题 16.20. T9键盘

题目: 在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表.每个数字映射到0至4个字母.给定一个数字序列,实现一个算法来返回匹配单词的列表.你会得到一张含有有效单词的列表.映射如下图所示: 示例 1: 输入: num = "8733", words = ["tree", "used"] 输出: ["tree", "used"] 示例 2: 输入: num = "2"

程序员面试金典-面试题 17.04. 消失的数字

题目: 数组nums包含从0到n的所有整数,但其中缺了一个.请编写代码找出那个缺失的整数.你有办法在O(n)时间内完成吗? 注意:本题相对书上原题稍作改动 示例 1: 输入:[3,0,1] 输出:2 示例 2: 输入:[9,6,4,2,3,5,7,0,1] 输出:8 分析: 先利用高斯求和,然后依次减去数组中的每一个元素,剩下的值就是缺失值. 程序: class Solution { public int missingNumber(int[] nums) { int sum = (0 + nu

LeetCode题解分类汇总(包括剑指Offer和程序员面试金典,持续更新)

LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) 剑指Offer 数据结构 链表 序号 题目 难度 06 从尾到头打印链表 简单 18 删除链表的节点 简单 22 链表中倒数第k个节点 简单 二叉树 序号 题目 难度 07 重建二叉树 中等 栈和队列 序号 题目 难度 09 用两个栈实现队列 简单 图 序号 题目 难度 12 矩阵中的路径 中等 13 机器人的运动范围 中等 算法 动态规划 序号 题目 难度 10- I 斐波那契数列 简单 10- II 青蛙跳台阶问题 简单 查找