Skip to content

Commit 2451045

Browse files
committed
二刷125
1 parent 76f8917 commit 2451045

File tree

4 files changed

+101
-17
lines changed

4 files changed

+101
-17
lines changed

docs/0125-valid-palindrome.adoc

+55-17
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,73 @@
11
[#0125-valid-palindrome]
2-
= 125. Valid Palindrome
2+
= 125. 验证回文串
33

4-
{leetcode}/problems/valid-palindrome/[LeetCode - Valid Palindrome^]
4+
https://leetcode.cn/problems/valid-palindrome/[LeetCode - 125. 验证回文串 ^]
55

6-
基本思路就是从两边想中间挤压。记得前不久有一道题使用了相似的处理手段,容我有时间找找看!
6+
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 *回文串*
77

8-
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
8+
字母和数字都属于字母数字字符。
99

10-
*Note:* For the purpose of this problem, we define empty string as valid palindrome.
10+
给你一个字符串 `s`,如果它是 *回文串* ,返回 `true`;否则,返回 `false`
1111

12-
*Example 1:*
12+
*示例 1:*
1313

14-
[subs="verbatim,quotes,macros"]
15-
----
16-
*Input:* "A man, a plan, a canal: Panama"
17-
*Output:* true
18-
----
14+
....
15+
输入: s = "A man, a plan, a canal: Panama"
16+
输出:true
17+
解释:"amanaplanacanalpanama" 是回文串。
18+
....
1919

20-
*Example 2:*
20+
*示例 2:*
2121

22-
[subs="verbatim,quotes,macros"]
23-
----
24-
*Input:* "race a car"
25-
*Output:* false
26-
----
22+
....
23+
输入:s = "race a car"
24+
输出:false
25+
解释:"raceacar" 不是回文串。
26+
....
27+
28+
*示例 3:*
29+
30+
....
31+
输入:s = " "
32+
输出:true
33+
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
34+
由于空字符串正着反着读都一样,所以是回文串。
35+
....
36+
37+
38+
*提示:*
39+
40+
* `1 \<= s.length \<= 2 * 10^5^`
41+
* `s` 仅由可打印的 ASCII 字符组成
2742
2843
44+
== 思路分析
45+
46+
基本思路就是从两边想中间挤压。记得前不久有一道题使用了相似的处理手段,容我有时间找找看!
2947

3048
[[src-0125]]
49+
[tabs]
50+
====
51+
一刷::
52+
+
53+
--
3154
[{java_src_attr}]
3255
----
3356
include::{sourcedir}/_0125_ValidPalindrome.java[tag=answer]
3457
----
58+
--
59+
60+
二刷::
61+
+
62+
--
63+
[{java_src_attr}]
64+
----
65+
include::{sourcedir}/_0125_ValidPalindrome_2.java[tag=answer]
66+
----
67+
--
68+
====
69+
70+
71+
== 参考资料
72+
3573

logbook/202503.adoc

+5
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,11 @@ endif::[]
523523
|{doc_base_url}/0122-best-time-to-buy-and-sell-stock-ii.adoc[题解]
524524
|✅ 有差价就买卖,见好就收。
525525

526+
|{counter:codes2503}
527+
|{leetcode_base_url}/valid-palindrome/[125. 验证回文串^]
528+
|{doc_base_url}/0125-valid-palindrome.adoc[题解]
529+
|✅ 双指针
530+
526531
|===
527532

528533
截止目前,本轮练习一共完成 {codes2503} 道题。

src/main/java/com/diguage/algo/leetcode/_0125_ValidPalindrome.java

+3
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ public class _0125_ValidPalindrome {
3434
* Runtime: 3 ms, faster than 96.33% of Java online submissions for Valid Palindrome.
3535
*
3636
* Memory Usage: 38.3 MB, less than 76.78% of Java online submissions for Valid Palindrome.
37+
*
38+
* @author D瓜哥 · https://www.diguage.com
39+
* @since 2020-01-14 23:34
3740
*/
3841
public boolean isPalindrome(String s) {
3942
if (Objects.isNull(s) || s.length() == 0) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0125_ValidPalindrome_2 {
4+
// tag::answer[]
5+
6+
/**
7+
* @author D瓜哥 · https://www.diguage.com
8+
* @since 2025-04-27 23:28:48
9+
*/
10+
public boolean isPalindrome(String s) {
11+
int left = 0, right = s.length() - 1;
12+
while (left <= right) {
13+
if (!isAlphanum(s.charAt(left))) {
14+
left++;
15+
} else if (!isAlphanum(s.charAt(right))) {
16+
right--;
17+
} else {
18+
if (Character.toLowerCase(s.charAt(left))
19+
!= Character.toLowerCase(s.charAt(right))) {
20+
return false;
21+
}
22+
left++;
23+
right--;
24+
}
25+
}
26+
return true;
27+
}
28+
29+
private boolean isAlphanum(char c) {
30+
return Character.isAlphabetic(c) || Character.isDigit(c);
31+
}
32+
33+
// end::answer[]
34+
public static void main(String[] args) {
35+
new _0125_ValidPalindrome_2()
36+
.isPalindrome("0P");
37+
}
38+
}

0 commit comments

Comments
 (0)