|
46 | 46 |
|
47 | 47 | <!-- 这里可写通用的实现逻辑 -->
|
48 | 48 |
|
49 |
| -双指针,当 `s[i]` 不等于 `s[j]` 时,分别尝试跳过 `i` 或跳过 `j`。 |
| 49 | +**方法一:双指针** |
| 50 | + |
| 51 | +我们用两个指针分别指向字符串的左右两端,每次判断两个指针指向的字符是否相同,如果不相同,则判断删除左指针对应的字符后字符串是否是回文字符串,或者判断删除右指针对应的字符后字符串是否是回文字符串。如果两个指针指向的字符相同,则将左右指针都往中间移动一位,直到两个指针相遇为止。 |
| 52 | + |
| 53 | +如果遍历结束,都没有遇到指针指向的字符不相同的情况,那么字符串本身就是一个回文字符串,返回 `true` 即可。 |
| 54 | + |
| 55 | +时间复杂度 $O(n)$,其中 $n$ 是字符串 $s$ 的长度。空间复杂度 $O(1)$。 |
50 | 56 |
|
51 | 57 | <!-- tabs:start -->
|
52 | 58 |
|
@@ -129,17 +135,21 @@ function isPalinddrome(s: string): boolean {
|
129 | 135 | class Solution {
|
130 | 136 | public:
|
131 | 137 | bool validPalindrome(string s) {
|
132 |
| - for (int i = 0, j = s.size() - 1; i < j; ++i, --j) |
133 |
| - if (s[i] != s[j]) |
| 138 | + for (int i = 0, j = s.size() - 1; i < j; ++i, --j) { |
| 139 | + if (s[i] != s[j]) { |
134 | 140 | return check(s, i + 1, j) || check(s, i, j - 1);
|
| 141 | + } |
| 142 | + } |
135 | 143 | return 1;
|
136 | 144 | }
|
137 | 145 |
|
138 | 146 | bool check(string s, int i, int j) {
|
139 |
| - for (; i < j; ++i, --j) |
140 |
| - if (s[i] != s[j]) |
141 |
| - return 0; |
142 |
| - return 1; |
| 147 | + for (; i < j; ++i, --j) { |
| 148 | + if (s[i] != s[j]) { |
| 149 | + return false; |
| 150 | + } |
| 151 | + } |
| 152 | + return true; |
143 | 153 | }
|
144 | 154 | };
|
145 | 155 | ```
|
@@ -190,6 +200,35 @@ var validPalindrome = function (s) {
|
190 | 200 | };
|
191 | 201 | ```
|
192 | 202 |
|
| 203 | +### **C#** |
| 204 | + |
| 205 | +```cs |
| 206 | +public class Solution { |
| 207 | + public bool ValidPalindrome(string s) { |
| 208 | + int i = 0, j = s.Length - 1; |
| 209 | + while (i < j && s[i] == s[j]) { |
| 210 | + i++; |
| 211 | + j--; |
| 212 | + } |
| 213 | + if (i >= j) { |
| 214 | + return true; |
| 215 | + } |
| 216 | + return check(s, i + 1, j) || check(s, i, j - 1); |
| 217 | + } |
| 218 | + |
| 219 | + private bool check(string s, int i, int j) { |
| 220 | + while (i < j) { |
| 221 | + if (s[i] != s[j]) { |
| 222 | + return false; |
| 223 | + } |
| 224 | + i++; |
| 225 | + j--; |
| 226 | + } |
| 227 | + return true; |
| 228 | + } |
| 229 | +} |
| 230 | +``` |
| 231 | + |
193 | 232 | ### **...**
|
194 | 233 |
|
195 | 234 | ```
|
|
0 commit comments