1
class Solution {
2
int first_diff(string s) {
3
for (int i = 0; i < (s.size() + 1) / 2; ++i) {
4
if (s[i] != s[s.size() - 1 - i]) {
5
return i;
6
}
7
}
8
return -1;
9
}
10

11
public:
12
bool validPalindrome(string s) {
13
int diff = first_diff(s);
14
if (diff == -1 || (s.size() % 2 == 0 && diff + 1 == s.size() / 2)) {
15
// abca. If we have pattern like this than we can delete one of the
16
// symbols
17
return true;
18
}
19

20
bool first_valid = true;
21
for (int i = diff; i < (s.size() + 1) / 2; ++i) {
22
if (s[i] != s[s.size() - 2 - i]) {
23
first_valid = false;
24
break;
25
}
26
}
27

28
bool second_valid = true;
29
for (int i = diff; i < (s.size() + 1) / 2; ++i) {
30
if (s[i + 1] != s[s.size() - 1 - i]) {
31
second_valid = false;
32
break;
33
}
34
}
35
return first_valid || second_valid;
36
}
37
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0