-
Notifications
You must be signed in to change notification settings - Fork 17
/
space_replace.php
52 lines (45 loc) · 1.33 KB
/
space_replace.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
/**
* 将字符串中的空格替换成%20,要求时间复杂度为O(n)
* Author: 学院君
*/
// 以空间换时间,创建一个新的字符串
function method_1($str, $char = ' ', $to = '%20')
{
$target = '';
for ($i = 0; $i < strlen($str); $i++) {
$target .= $str[$i] == $char ? $to : $str[$i];
}
return $target;
}
// 在原字符串基础上做替换,实现起来复杂一些,但节省了内存空间
function method_2($str, $char = ' ', $to = '%20')
{
$count = 0;
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
if ($str[$i] == $char) {
$count++;
}
}
if ($count == 0) {
return $str;
}
$newLen = $len + $count * strlen($to) - $count * strlen($char); // 最终替换后字符串长度
$str = str_pad($str, $newLen); // 用空格填充字符串到最终替换后长度
$i = $len - 1; // 原始字符串最后一个字符索引
$j = $newLen - 1; // 替换后字符串最后一个字符索引
while ($i >= 0 && $j > $i) {
if ($str[$i] != $char) {
$str[$j--] = $str[$i--];
} else {
$str[$j--] = '0';
$str[$j--] = '2';
$str[$j--] = '%';
$i--;
}
}
return $str;
}
var_dump(method_1('We are happy.'));
var_dump(method_2('We are happy.'));