【Lintcode】415. Valid Palindrome

你。 提交于 2020-02-19 07:13:18

题目地址:

https://www.lintcode.com/problem/valid-palindrome/description

给定一个字符串,只考虑字母和数字,字母忽略大小写区别,忽略所有其他字符,问该字符串是否回文。直接对撞双指针,左指针持续右移直到遇到字母或数字,右指针持续左移直到遇到字母或数字,如果指到的两个字符忽略大小写后不等,就直接返回false。循环结束后返回true。

public class Solution {
    /**
     * @param s: A string
     * @return: Whether the string is a valid palindrome
     */
    public boolean isPalindrome(String s) {
        // write your code here
        // 判空
        if (s == null || s.isEmpty()) {
            return true;
        }
        // 开两个变量做左右指针
        int i = 0, j = s.length() - 1;
        while (i < j) {
        	// 注意循环的时候一定要保持左右指针没有交错过去
            while (i < j && !Character.isLetterOrDigit(s.charAt(i))) {
                i++;
            }
            while (i < j && !Character.isLetterOrDigit(s.charAt(j))) {
                j--;
            }
            if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) {
                return false;
            } else {
                i++;
                j--;
            }
        }
        
        return true;
    }
}

时间复杂度O(n)O(n),空间O(1)O(1)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!