【剑指offer】字符串基础知识

字符串
面试题五:替换空格
#include<iostream>
using std::cout;

/**
 * 把字符串的空格替换为"%20"
 * 注意两种场景:1)在原来的字符串上进行替换;2)创建新的字符串,并在新的字符串上修改
 * 本代码是在原来字符串上进行替换
 */
void ReplaceBlank(char string[], int length)  //length是字符串数组的总容量
{
    if (string == NULL || length <= 0) {
        return;
    }

    int originalLength = 0;  //字符串string的实际长度
    int numberOfBlank = 0;
    int i = 0;
    while (string[i] != '\0') {
        originalLength ++;
        if (string[i] == ' ') {
            numberOfBlank++;
        }
        i++;
    }

    int newLength = originalLength + numberOfBlank * 2;
    if (newLength > length) {
        return;
    }

    int indexOfOrigin = originalLength;
    int indexOfNew = newLength;
    while (indexOfOrigin >= 0 && indexOfNew > indexOfOrigin) {
        if (string[indexOfOrigin] == ' ') {
            string[indexOfNew--] = '0';
            string[indexOfNew--] = '2';
            string[indexOfNew--] = '%';
        } else {
            string[indexOfNew--] = string[indexOfOrigin];
        }
        --indexOfOrigin;
    }
}

int main()
{
    char string[] = "We are happy.";
    ReplaceBlank(string,20);
    cout << string;
    return 0;
}
相关题目:

有两个排序的数组A1和A2,内存在A1 的末尾有足够的空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1 中,并且所有数字是有序的。

类似:【LeetCode】Merge Sorted Array

从后往前填充!!!

1、当两个数组都有元素的时候,填充大的末尾,如果有一个数组的数用完了,说明剩下的所有数都小于当前的填充位置;
2、如果第一个数组用完,说明剩下的全是数组A2,把数组A2全部填充进去就可以了;
3、如果是第二个数组用完,说明剩下的全是数组A1,不用填充,因为数组A1已经存在了。

void merge(int nums1[], int m, int nums2[], int n)
{
    int i = m-1, j = n-1, writeIdx = m+n-1;
    while (i >= 0 && j >= 0) {
        nums1[writeIdx--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
    }
    while (j >= 0) {
        nums1[writeIdx--] = nums2[j--];
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值