欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)LeetCode(125.驗證回文字符串)

 更新時間:2021年07月27日 14:24:13   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(驗證回文字符串).本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

[LeetCode] 125.Valid Palindrome 驗證回文字符串

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

驗證回文字符串是比較常見的問題,所謂回文,就是一個正讀和反讀都一樣的字符串,比如“l(fā)evel”或者“noon”等等就是回文串。但是這里,加入了空格和非字母數字的字符,增加了些難度,但其實原理還是很簡單:只需要建立兩個指針,left和right, 分別從字符的開頭和結尾處開始遍歷整個字符串,如果遇到非字母數字的字符就跳過,繼續(xù)往下找,直到找到下一個字母數字或者結束遍歷,如果遇到大寫字母,就將其轉為小寫。等左右指針都找到字母數字時,比較這兩個字符,若相等,則繼續(xù)比較下面兩個分別找到的字母數字,若不相等,直接返回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;
    }
};

我們也可以用系統(tǒng)自帶的判斷是否是數母字符的判斷函數isalnum,參見代碼如下;

解法二:

class Solution {
public:
    bool isPalindrome(string s) {
        int left = 0, right = s.size() - 1 ;
        while (left < right) {
            if (!isalnum(s[left])) ++left;
            else if (!isalnum(s[right])) --right;
            else if ((s[left] + 32 - 'a') %32 != (s[right] + 32 - 'a') % 32) return false;
            else {
                ++left; --right;
            }
        }
        return true;
    }
};

到此這篇關于C++實現(xiàn)LeetCode(驗證回文字符串)的文章就介紹到這了,更多相關C++驗證回文字符串內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++內存管理面經

    C++內存管理面經

    這篇文章主要介紹了C++的內存分配方式以及介紹了下棧和堆的區(qū)別,感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • C語言中free函數的使用詳解

    C語言中free函數的使用詳解

    free函數是釋放之前某一次malloc函數申請的空間,而且只是釋放空間,并不改變指針的值。下面我們就來詳細探討下
    2017-05-05
  • 深入理解c++20 concepts

    深入理解c++20 concepts

    本文主要介紹了深入理解c++20 concepts,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 標準C++類string的Copy-On-Write技術

    標準C++類string的Copy-On-Write技術

    這里,我想從C++類或是設計模式的角度為各位揭開Copy-On-Write技術在string中實現(xiàn)的面紗,以供各位在用C++進行類庫設計時做一點參考
    2013-11-11
  • QT TCP實現(xiàn)簡單的通信示例

    QT TCP實現(xiàn)簡單的通信示例

    這篇文章主要為大家詳細介紹了QT TCP簡單的通信示例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++類與對象深入之引用與內聯(lián)函數與auto關鍵字及for循環(huán)詳解

    C++類與對象深入之引用與內聯(lián)函數與auto關鍵字及for循環(huán)詳解

    朋友們好,這篇播客我們繼續(xù)C++的初階學習,現(xiàn)在對一些C++的入門知識做了些總結,整理出來一篇博客供我們一起復習和學習,如果文章中有理解不當的地方,還希望朋友們在評論區(qū)指出,我們相互學習,共同進步
    2022-06-06
  • c++11 新特性——智能指針使用詳解

    c++11 新特性——智能指針使用詳解

    這篇文章主要介紹了c++11 新特性——智能指針使用的相關資料,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • 使用C++實現(xiàn)FTP上傳和下載

    使用C++實現(xiàn)FTP上傳和下載

    當在Windows上使用C++進行FTP上傳和下載時,您可以使用libcurl庫來簡化操作,本文將為大家詳細介紹具體步驟,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • C++模板類的用法

    C++模板類的用法

    這篇文章主要介紹了C++模板類的用法,實例講述了模板類的概念及相關用法,需要的朋友可以參考下
    2014-10-10
  • C語言編程C++自定義個性化類型

    C語言編程C++自定義個性化類型

    這篇文章主要介紹了C語言編程中如何來自定義C++個性化類型,文中附含詳細的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09

最新評論