LintCode題解|FB/Uber 最新OA高頻題:有效迴文串

FB/Uber 最新OA高頻題:有效迴文串

描述git

給定一個字符串,判斷其是否爲一個迴文串。只考慮字母和數字,忽略大小寫。面試

你是否考慮過,字符串有多是空字符串?這是面試過程當中,面試官經常會問的問題。
在這個題目中,咱們將空字符串斷定爲有效迴文。

樣例bash

樣例 1:函數

輸入: "A man, a plan, a canal: Panama"
輸出: true
解釋: "amanaplanacanalpanama"複製代碼

樣例 2:ui

輸入: "race a car"
輸出: false
解釋: "raceacar"複製代碼

挑戰
O(n) 時間複雜度,且不佔用額外空間。spa

相關題目code

題目解析cdn

判斷給定字符串是不是迴文串,只須要比較ASCII碼的字母和數字便可,其它符號跳過blog

首先介紹兩個函數,在這裏使用比較方便字符串

int isalnum(int c);若是c是數字或大小寫字母,返回true

int toupper(int c);將字符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() && !isvalid(s.charAt(front))) { // nead to check range of a/b
                front++;
            }

            if (front == s.length()) { // for empty string 「.,,,」     
                return true; 
            }           

            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);
    }
}複製代碼
相關文章
相關標籤/搜索