Skip to content

Commit 9a69417

Browse files
committed
Implement split-a-string-in-balanced-strings
https://leetcode.com/problems/split-a-string-in-balanced-strings Fixes #224 time: 0ms time-rank: 100% time-complexity: O(N) space: 6.5MB space-rank: 26.98% space-complexity: O(1)
1 parent 77a8eeb commit 9a69417

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* MIT License
3+
*
4+
* Copyright (c) 2018 Christopher Friedt
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
#include <gtest/gtest.h>
26+
27+
#include "split-a-string-in-balanced-strings.cpp"
28+
29+
TEST(SplitAStringInBalancedStrings, Test_RLRRLLRLRL) {
30+
string input = "RLRRLLRLRL";
31+
vector<string> expected_vs = {
32+
"RL",
33+
"RRLL",
34+
"RL",
35+
"RL",
36+
};
37+
int expected_int = expected_vs.size();
38+
int actual_int = Solution().balancedStringSplit(input);
39+
EXPECT_EQ(actual_int, expected_int);
40+
}
41+
42+
TEST(SplitAStringInBalancedStrings, Test_RLLLLRRRLR) {
43+
string input = "RLLLLRRRLR";
44+
vector<string> expected_vs = {
45+
"RL",
46+
"LLLRRR",
47+
"LR",
48+
};
49+
int expected_int = expected_vs.size();
50+
int actual_int = Solution().balancedStringSplit(input);
51+
EXPECT_EQ(actual_int, expected_int);
52+
}
53+
54+
TEST(SplitAStringInBalancedStrings, Test_LLLLRRRR) {
55+
string input = "LLLLRRRR";
56+
vector<string> expected_vs = {
57+
"LLLLRRRR",
58+
};
59+
int expected_int = expected_vs.size();
60+
int actual_int = Solution().balancedStringSplit(input);
61+
EXPECT_EQ(actual_int, expected_int);
62+
}
63+
64+
TEST(SplitAStringInBalancedStrings, Test_RLRRRLLRLL) {
65+
string input = "RLRRRLLRLL";
66+
vector<string> expected_vs = {
67+
"RL",
68+
"RRRLLRLL",
69+
};
70+
int expected_int = expected_vs.size();
71+
int actual_int = Solution().balancedStringSplit(input);
72+
EXPECT_EQ(actual_int, expected_int);
73+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* MIT License
3+
*
4+
* Copyright (c) 2018 Christopher Friedt
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
25+
#include <string>
26+
27+
using namespace std;
28+
29+
class Solution {
30+
public:
31+
// https://leetcode.com/problems/split-a-string-in-balanced-strings/
32+
33+
int balancedStringSplit(string s) {
34+
35+
/*
36+
* ex
37+
* RLRRLLRLRL
38+
*
39+
* p1 p2 c1 c2 balance npairs
40+
* 0 1 R L 0 1
41+
* 2 3 R R -2 1
42+
* 2 4 R L -1 1
43+
* 2 5 R L 0 2
44+
* 6 7 R L 0 3
45+
* 8 9 R L 0 4
46+
*/
47+
48+
int r = 0;
49+
int balance = 0;
50+
for (size_t p1 = 0, p2 = 1, N = s.size(); p1 + 1 < N && p2 < N;) {
51+
if ((0 == p1 && 1 == p2) || 0 == balance) {
52+
balance += (s[p1] == 'R') ? -1 : 1;
53+
}
54+
55+
balance += (s[p2] == 'R') ? -1 : 1;
56+
57+
if (0 == balance) {
58+
++r;
59+
p1 = p2 + 1;
60+
p2 += 2;
61+
} else {
62+
++p2;
63+
}
64+
}
65+
66+
return r;
67+
}
68+
};

0 commit comments

Comments
 (0)