File tree Expand file tree Collapse file tree 4 files changed +105
-0
lines changed Expand file tree Collapse file tree 4 files changed +105
-0
lines changed Original file line number Diff line number Diff line change
1
+ // 第1段階のコード
2
+ class Solution {
3
+ public:
4
+
5
+ template <class ForwardIt , class UnaryPredicate >
6
+ ForwardIt remove_if (ForwardIt first, ForwardIt last, UnaryPredicate p) {
7
+ ForwardIt filteredLast = first;
8
+ while (first != last) {
9
+ if (!p (*first)) {
10
+ *filteredLast = *first;
11
+ filteredLast++;
12
+ }
13
+ first++;
14
+ }
15
+
16
+ return filteredLast;
17
+ }
18
+
19
+ bool isPalindrome (string s) {
20
+ string checker = s;
21
+ checker.erase (
22
+ remove_if (checker.begin (), checker.end (), [](unsigned char c) { return !isalnum (c); } ),
23
+ checker.end ()
24
+ );
25
+
26
+ for (int i=0 ; i < checker.size (); i++) {
27
+ checker[i] = tolower (checker[i]);
28
+ }
29
+
30
+ string checkerReverse = checker;
31
+
32
+ reverse (checkerReverse.begin (), checkerReverse.end ());
33
+
34
+ cout << checker << endl << checkerReverse << endl;
35
+
36
+ return (checker == checkerReverse);
37
+ }
38
+ };
Original file line number Diff line number Diff line change
1
+ // 第2段階のコード、第1段階のコードを読みやすくした
2
+ class Solution {
3
+ public:
4
+ bool isPalindrome (string s) {
5
+ string checker;
6
+
7
+ for (char c: s) {
8
+ if (isalnum (c)) {
9
+ checker += tolower (c);
10
+ }
11
+ }
12
+
13
+ string checkerReverse = checker;
14
+
15
+ reverse (checkerReverse.begin (), checkerReverse.end ());
16
+
17
+ return (checker == checkerReverse);
18
+ }
19
+ };
Original file line number Diff line number Diff line change
1
+ // 第2段階のコード、3回連続でパスしたもの
2
+ class Solution {
3
+ public:
4
+ bool isPalindrome (string s) {
5
+ if (s.empty ()) abort ();
6
+
7
+ string checker;
8
+ for (char c: s) {
9
+ if (isalnum (c)) {
10
+ checker += tolower (c);
11
+ }
12
+ }
13
+
14
+ string reversedChecker = checker;
15
+ reverse (reversedChecker.begin (), reversedChecker.end ());
16
+
17
+ return reversedChecker == checker;
18
+ }
19
+ };
Original file line number Diff line number Diff line change
1
+ // 3重ループを1重ループとしたコード
2
+ class Solution {
3
+ public:
4
+ bool isPalindrome (string s) {
5
+ if (s.empty ()) abort ();
6
+ int left = 0 , right = s.size ()-1 ;
7
+
8
+ while (left < right) {
9
+ if (!isalnum (s[left])) {
10
+ left++;
11
+ continue ;
12
+ }
13
+
14
+ if (!isalnum (s[right])) {
15
+ right--;
16
+ continue ;
17
+ }
18
+
19
+ if (tolower (s[left]) != tolower (s[right])) {
20
+ return false ;
21
+ }
22
+
23
+ left++;
24
+ right--;
25
+ }
26
+
27
+ return true ;
28
+ }
29
+ };
You can’t perform that action at this time.
0 commit comments