zoukankan      html  css  js  c++  java
  • Leetcode---剑指Offer题5---替换空格




    剑指Offer-面试题5---替换空格

    1、介绍

    https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/solution/
    实现一个函数,把字符串中每个空格替换成"%20"。例如,输入"Hello World",输出"Hello%20World"。

    2、题解

    C#解法
    因为这道题传入的是string,没法修改。
    所以直接replace方法替代了,具体看C++解法。

            public string ReplaceSpace(string s)
            {
                if (s == null || s.Length < 1)
                    return s;
    
                return s.Replace(" ", "%20");
            }
    

    c++解法
    推荐的方法:从后向前遍历,详细过程看代码。
    时间复杂度:O(n)

    ///arr是要修改的字符串,length表示这个字符串的最大长度
    void ChangeSpace(char arr[], int length)
    {
    	if (arr == nullptr || length<=0)
    	{
    		return;
    	}
    
    	int i = 0;
    	//字符串实际长度
    	int arrLength = 0;
    	//空格个数
    	int spaceNum = 0;
    	while (arr[i] != '')
    	{
    		if (arr[i] == ' ')
    			spaceNum++;
    
    		arrLength++;
    		i++;
    	}
    
    	//新字符串需要的长度
    	int newArrLength = arrLength + spaceNum * 2;
    	if (newArrLength > length)
    		return;
    
    	//从后向前依次比较替换
    	while (arrLength >= 0 && newArrLength > arrLength)
    	{
    		if (arr[arrLength] == ' ')
    		{
    			arr[newArrLength] = '0';
    			arr[newArrLength-1] = '2';
    			arr[newArrLength-2] = '%';
    			arrLength--;
    			newArrLength-=3;
    		}
    		else {
    			arr[newArrLength] = arr[arrLength];
    			arrLength--;
    			newArrLength--;
    		}
    	}
    }
    

    3、变形题

    有两个排序的数组a1和a2,内存在a1的末尾有足够多的空余时间容纳a2。实现一个函数,把a2中的所有数字插入a2中,并且所有的数字是排序的。

    ///需要排序的两个数组和其各自的长度
    void Sort(int arr1[], int arr2[], int length1, int length2)
    {
    	if (arr1 == nullptr || arr2 == nullptr || length2<=0)
    	{
    		return;
    	}
    	
    	//总长度
    	int length = length1 + length2;
    
    	//从后向前依次比较
    	while (length1 >= 0 && length > length1)
    	{
    		if (arr1[length1-1] >= arr2[length2-1])
    		{
    			arr1[length - 1] = arr1[length1 - 1];
    			length--;
    			length1--;
    		}
    		else {
    			arr1[length - 1] = arr2[length2 - 1];
    			length--;
    			length2--;
    		}
    	}
    }
    
  • 相关阅读:
    windows多线程(三) 原子操作
    windows多线程(二) 等待线程返回
    windows多线程(一) 创建线程 CreateThread
    Js 中的原始值和引用值
    Linux 文件系统介绍
    Linux命令(二十) 显示系统内存状态 free
    Linux命令(十九) 查看系统负载 uptime
    Linux命令(十八) 压缩或解压缩文件和目录 gzip gunzip
    git使用
    python 中调用shell命令
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11890795.html
Copyright © 2011-2022 走看看