[LeetCode]驗證回文字符串

題目:

給定一個字符串,驗證它是否是回文串,只考慮字母和數(shù)字字符,可以忽略字母的大小寫。
說明:
本題中,我們將空字符串定義為有效的回文串。
示例 1:

輸入: "A man, a plan, a canal: Panama"
輸出: true

示例 2:

輸入: "race a car"
輸出: false

分析:

  • 1,只需要建立兩個指針,left和right, 分別從字符的開頭和結(jié)尾處開始遍歷整個字符串,如果遇到非字母數(shù)字的字符就跳過,繼續(xù)往下找,直到找到下一個字母數(shù)字或者結(jié)束遍歷,如果遇到大寫字母,就將其轉(zhuǎn)為小寫。等左右指針都找到字母數(shù)字時,比較這兩個字符,若相等,則繼續(xù)比較下面兩個分別找到的字母數(shù)字,若不相等,直接返回false。

時間復雜度為O(n)

class Solution {
public:
    bool isPalindrome(string s) {
        int left = 0, right = s.size() - 1 ;
        while (left < right) {
            if (!isAlphaNum(s[left])) ++left;
            else if (!isAlphaNum(s[right])) --right;
            else if ((s[left] + 32 - 'a') %32 != (s[right] + 32 - 'a') % 32) return false;
            else {
                ++left; --right;
            }
        }
        return true;
    }
    bool isAlphaNum(char &ch) {
        if (ch >= 'a' && ch <= 'z') return true;
        if (ch >= 'A' && ch <= 'Z') return true;
        if (ch >= '0' && ch <= '9') return true;
        return false;
    }
};

上面代碼在LeetCode上的運行時間為8 ms。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,556評論 0 13
  • 前言 最先接觸編程的知識是在大學里面,大學里面學了一些基礎(chǔ)的知識,c語言,java語言,單片機的匯編語言等;大學畢...
    oceanfive閱讀 3,395評論 0 7
  • 本文內(nèi)容為練習LeetCode題目時的解題思路和不同算法的記錄,實現(xiàn)語言為C++,代碼保存在Github,均已在L...
    SK木眠閱讀 1,112評論 0 0
  • 如果你想要嘗試在工程中安轉(zhuǎn)cocoapods,那么網(wǎng)上的資料太多了,但是如果你想要刪除掉cocoapods,那么怎...
    沒有黑眼圈de熊貓閱讀 1,815評論 1 6

友情鏈接更多精彩內(nèi)容