zoukankan      html  css  js  c++  java
  • Lintcode415

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
    Example
    "A man, a plan, a canal: Panama" is a palindrome.
    "race a car" is not a palindrome.
    Challenge
    O(n) time without extra memory.
     
    双指针往中间走,没有被不相等中断从而最后实现指针交叉就是回文串。遇到特殊字符用while跳过缩进,缩进过程中确认没有超过边界。
    细节:
    1. 要询问面试官空字符串”"算不算回文串。此题算是。
    2.记得根据题目要求做不区分大小写。
    3.实用方法:Character.isLetter(char c), Character.isDigit(char c), Character.toLowerCase(char c). (返回char)。library名不带s。
    4.对比char是否相等用==,对比Character是否相等用equals.
     
    我的实现:
    class Solution {
        public boolean isPalindrome(String s) {
            // P1:toLowerCase
            char[] cs = s.toLowerCase().toCharArray();
            int i = 0, j = cs.length - 1;
            while (i < j) {
                while (i < j && !isValid(cs[i])) i++;
                while (i < j && !isValid(cs[j])) j--;
                if (i < j && cs[i] != cs[j]) {
                    return false;
                }
                i++;
                j--;
            }
            return true;
        }
        
        private boolean isValid(char c) {
            return Character.isLetter(c) || Character.isDigit(c);
        }
    }

    九章实现:

    他们在滑过无效字符的时候就允许交叉,比较宽松,可以一直滑到最后。

    public class Solution {
        public boolean isPalindrome(String s) {
            if (s == null || s.length() == 0) {
                return true;
            }
    
            int front = 0;
            int end = s.length() - 1;
            while (front < end) {
                while (front < s.length() - 1&& !isvalid(s.charAt(front))){ // nead to check range of a/b
                    front++;
                }
    
                while (end > 0 && ! isvalid(s.charAt(end))) { // same here, need to check border of a,b
                    end--;
                }
    
                if (Character.toLowerCase(s.charAt(front)) != Character.toLowerCase(s.charAt(end))) {
                    break;
                } else {
                    front++;
                    end--;
                }
            }
    
            return end <= front; 
        }
    
        private boolean isvalid (char c) {
            return Character.isLetter(c) || Character.isDigit(c);
        }
    }
  • 相关阅读:
    Spark SQL+day04笔记
    Spark 环境搭建
    海量数据处理 算法总结2
    Scala面试题 看过1
    HTML-table、form表单标签的介绍
    Java-CSS美化网页元素
    Java-BOM与DOM对象
    java-CSS盒子模型、浮动、定位
    java-基础面试题(2)
    Java-io流
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/9420879.html
Copyright © 2011-2022 走看看