Substitute Spaces

This commit is contained in:
Sainnhe Park 2022-11-29 20:26:23 +08:00
parent 80ee14486c
commit e37f2531d7
5 changed files with 66 additions and 0 deletions

13
include/offer_05.hpp Normal file
View File

@ -0,0 +1,13 @@
#ifndef OFFER_05_HPP
#define OFFER_05_HPP
#include <string>
using namespace std;
class Solution {
public:
string replaceSpace(string s);
};
#endif

View File

@ -4,6 +4,10 @@
- [移除元素](./remove_elements.md)
- [长度最小的子数组](./minimum_size_subarray_sum.md)
# 字符串
- [替换空格](./substitute_spaces.md)
# 经典代码
- [合并两个有序链表](./merge_two_sorted_linked_lists.md)

View File

@ -0,0 +1,15 @@
# 替换空格
[Leetcode](https://leetcode.cn/problems/ti-huan-kong-ge-lcof/)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1
> 输入s = "We are happy."
>
> 输出:"We%20are%20happy."
![demo](https://tva1.sinaimg.cn/large/e6c9d24ely1go6qmevhgpg20du09m4qp.gif)
对于很多数组填充类问题,都可以先计算出扩展后数组的长度,然后从后往前双指针。

24
src/offer_05.cpp Normal file
View File

@ -0,0 +1,24 @@
#include "offer_05.hpp"
string Solution::replaceSpace(string s) {
int len = s.length();
int cnt{0};
for (int i{0}; i < len; ++i) {
if (s[i] == ' ') {
s.push_back(' ');
s.push_back(' ');
cnt++;
}
}
len = s.length();
for (int fast = len - 1, slow = len - 1 - 2 * cnt; fast >= 0; --slow) {
if (s[slow] == ' ') {
s[fast--] = '0';
s[fast--] = '2';
s[fast--] = '%';
} else {
s[fast--] = s[slow];
}
}
return s;
}

10
tests/offer_05.cpp Normal file
View File

@ -0,0 +1,10 @@
#include "offer_05.hpp"
#include <gtest/gtest.h>
TEST(Offer05, Case1) {
string s{"We are happy."};
string expected{"We%20are%20happy."};
Solution solution;
EXPECT_EQ(solution.replaceSpace(s), expected);
}