Skip to content

Commit dbf6eef

Browse files
authored
Merge pull request #7 from colorbox/125
125. Valid Palindrome
2 parents f67e01b + 1ef6af0 commit dbf6eef

File tree

4 files changed

+105
-0
lines changed

4 files changed

+105
-0
lines changed

125/1.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+
};

125/2.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
};

125/3.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
};

125/4.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
};

0 commit comments

Comments
 (0)