返回
">LeetCode 125:验证回文串|高效优雅地破解字符串的镜像对称性
Android
2023-10-05 10:51:45
回文串,顾名思义,是指从左到右读和从右到左读都相同的字符串。它就像一面优雅的镜子,将字符映射出对称的美感。在计算机科学领域,验证回文串是一种常见且基础的算法问题,今天我们就以 LeetCode 125 为例,带领大家深入理解回文串的验证。
算法思路
我们知道,回文串从两端读起都是一样的。因此,我们可以将字符串从中间一分为二,然后分别从两端向中间对比字符。如果所有字符都一一对应,则该字符串为回文串;否则,它不是回文串。
为了实现这个算法,我们可以使用两个指针,分别指向字符串的两端。然后,我们可以同时移动这两个指针,同时比较它们指向的字符。如果字符相等,则继续比较下一个字符;如果字符不相等,则该字符串不是回文串,算法终止。
以下是使用 Java 实现的算法代码:
public boolean isPalindrome(String s) {
// 转换为小写并过滤非字母数字字符
s = s.toLowerCase().replaceAll("[^a-zA-Z0-9]", "");
<p>// 使用两个指针指向字符串的两端<br />
int left = 0;<br />
int right = s.length() - 1;</p>
<p>// 比较字符,直到指针相遇<br />
while (left < right) {<br />
if (s.charAt(left) != s.charAt(right)) {<br />
return false;<br />
}<br />
left++;<br />
right--;<br />
}</p>
<p>// 如果指针相遇,则字符串是回文串<br />
return true;<br />
}<br />
算法复杂度
该算法的时间复杂度为 O(n),其中 n 是字符串的长度。这是因为算法只需要遍历字符串一次即可完成比较。
该算法的空间复杂度为 O(1),因为算法不需要额外的空间来存储数据。
代码示例
以下是使用该算法验证回文串的一些代码示例:
<br />
System.out.println(isPalindrome("racecar")); // true<br />
System.out.println(isPalindrome("madam")); // true<br />
System.out.println(isPalindrome("hello")); // false<br />
System.out.println(isPalindrome("1221")); // true<br />
通过 LeetCode 125,我们学习了如何验证回文串。该算法简单易懂,时间和空间复杂度都很低,非常适合在实际应用中使用。