前言
虽然我以后不做算法工程师,我也深知我做不了,但是一些基础的算法还是需要学以致用的,一个好的算法可以可以让公司产生巨大的收益。
一、题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:" We%20are%20happy."
二、解题思路
-
思路1:这道题可以使用遍历法,从数组下标0开始进行遍历,并开辟一个新的数组,如果没有碰到空格就先就把那个数组下标的值赋值给另外一个数组,如果碰到了空格就把那个下标开始后面的三个数变成%20。
-
时间复杂度为O(N),因为他受数组的大小影响,数组有多大就要遍历多少次,空间复杂度为: O(N),因为这种方法还需要开辟新的内存空间,不建议使用
-
思路2
使用双指针的思路,首先我们可以先算出空格的个数,空格数用n表示,可以算出替换后的总空间的大小,对数组进行扩容。从数组的最后面开始遍历,i 指向原字符串尾部元素, j 指向新字符串尾部元素;当 i = j 时跳出(代表左方已没有空格,无需继续遍历),下面演示一下第二种的方式
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.使用C++的方式
class Solution {
public:
string replaceSpace(string s) {
int count = 0, len = s.size();
// 统计空格数量
for (char c : s) {
if (c == ' ') count++;
}
// 修改 s 长度
s.resize(len + 2 * count);//重新分配一个内存,但是不改变之前的大小
for(int i=len-1,j=s.size()-1;i<j;i--,j--)
{
if(s[i]!=' ')
{
s[j]=s[i];
}
else
{
s[j-2]='%';
s[j-1]='2';
s[j]='0';
j-=2;
}
}
// 倒序遍历修改
return s;
}
};
总结
慢慢来,算法小白也要变强@TOC