国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2023年7月2日leetcode每日一題打卡——125.驗證回文串

這篇具有很好參考價值的文章主要介紹了2023年7月2日leetcode每日一題打卡——125.驗證回文串。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、題目描述與要求

125. 驗證回文串 - 力扣(LeetCode)

題目描述

如果在將所有大寫字符轉(zhuǎn)換為小寫字符、并移除所有非字母數(shù)字字符之后,短語正著讀和反著讀都一樣。則可以認為該短語是一個?回文串 。

字母和數(shù)字都屬于字母數(shù)字字符。

給你一個字符串 s,如果它是 回文串 ,返回 true ;否則,返回 false 。

示例

示例1:

輸入: s = "A man, a plan, a canal: Panama"
輸出:true
解釋:"amanaplanacanalpanama" 是回文串。

示例2:

輸入:s = "race a car"
輸出:false
解釋:"raceacar" 不是回文串。

?示例3:

輸入:s = " "
輸出:true
解釋:在移除非字母數(shù)字字符之后,s 是一個空字符串 "" 。
由于空字符串正著反著讀都一樣,所以是回文串。

提示

  • 1 <= s.length <= 2 * 105
  • s?僅由可打印的 ASCII 字符組成

二、解題思路

總的思路:

? ? ? ?首先根據(jù)題目要求可以有兩種大的解題方法:一是對數(shù)組本身進行修改,將其改成要進行判斷的形式然后判斷其是否為回文串;二是利用雙指針的方式,對于要排除的字符選擇跳過,以此來判斷整個字符串是否為回文串?!鞠旅嫣岬降南聵俗兞恐傅氖怯脕碇甘鞠聵说恼妥兞俊?/p>

? ? ? ?對于第一種方法,則需要我們首先將數(shù)組中的所有大寫字符都轉(zhuǎn)成小寫字符,其實也就是26個字母的大寫轉(zhuǎn)成小寫,利用“ch=ch+32”即可實現(xiàn)。然后就是將數(shù)組中所有非字母數(shù)字字符進行移除,也就是刪去除字母和數(shù)字以外的其他字符,可以利用覆蓋的思想,在每次找到非字母數(shù)字字符時將后面所有字符往前覆蓋,覆蓋只需要利用到一個下標變量(時間較長)。也可以使用兩個下標變量,一個用來遍歷整個數(shù)組,另一個用來記錄修改后的數(shù)組。然后就是直接對修改后的數(shù)組首尾字符進行比較來判斷其是否為回文串。

? ? ? ?對于第二種方法,則需要我們設(shè)置一個判定條件,即只有當兩個字符都是字母或者數(shù)字才對其進行比較,一旦有一方不是,則需要尋找下一個字符用來比較,也就是所謂的“跳過”。這一方法需要利用到“雙指針”,也就是兩個下標變量。兩方都是的情況下則只需要修改大寫字母為小寫,然后進行判斷是否相同,相同則移動指針繼續(xù)比較直至遍歷結(jié)束/發(fā)現(xiàn)不是回文串則結(jié)束。【在實現(xiàn)這一方法的過程中,就是判斷字符是否是字母/數(shù)字字符的代碼比較長,看起來很亂,因而可以選擇將其單獨寫成一個函數(shù)】【修改大寫字母為小寫可以在判斷字符前把整個數(shù)組都進行修改,也可以在判斷后在對其進行修改】

2023年7月2日leetcode每日一題打卡——125.驗證回文串,leetcode刷題,leetcode,算法,職場和發(fā)展,c語言

具體步驟:

方法一:

①遍歷數(shù)組,將大寫字符全部轉(zhuǎn)換成小寫字符

②將數(shù)組中所有非字母數(shù)字字符進行移除【可以分為利用幾個下標變量】

③獲取數(shù)組長度

④判斷修改后的字符串是否為回文串

方法二:

①獲取數(shù)組長度

②將數(shù)組中的所有大寫字符轉(zhuǎn)成小寫字符

③判斷首尾字符是否為字母數(shù)字字符,并判斷是否相等,然后移動指針,直至獲得結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-521147.html


三、具體代碼【C語言】

①只采用一個下標變量來對數(shù)組進行修改(覆蓋)【超時,但步驟清晰,可用于理解】

bool isPalindrome(char* s) {
    int i = 0, j = 0;
    for (int i = 0; s[i] != '\0'; i++) { //遍歷數(shù)組,將大寫字符全部轉(zhuǎn)換成小寫字符
        if (s[i] >= 'A' && s[i] <= 'Z') {
            s[i] += 32;
        }

    }
    while (s[i] != '\0') {
        if ((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z')) //是數(shù)字或者字母字符 訪問下一個
        {
            i++;
        }
        else { //不是數(shù)字或者字符 覆蓋并繼續(xù)檢查
            for (j = i; s[j] != '\0'; j++) {
                s[j] = s[j + 1];
            }
            s[j - 1] = '\0';//此時j-1指向最后一個字符的后面第一位
        }
    }
    int len = strlen(s);
    //k=j-2是因為,數(shù)組下標從0開始,j-1是結(jié)束符的下標,j-2就是最后一個字符的下標
    for (int i = 0, k = len - 1; i < k; i++) {
        if (s[i] != s[k])
            return false;
        else k--;
    }
    return true;
}

②對①進行修改,即利用兩個下標變量來實現(xiàn)數(shù)組的修改【大寫改小寫與覆蓋同時進行】【最快】

bool isPalindrome(char* s) {
    int i = 0, j = 0;
    for (int i = 0; s[i] != '\0'; i++) { //遍歷數(shù)組,將大寫字符全部轉(zhuǎn)換成小寫字符
        if (s[i] >= 'A' && s[i] <= 'Z') {
            s[j++] = s[i] + 32;
        }
        else if ((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z')) {
            s[j++] = s[i];
        }
    }
    //此時j指向調(diào)整后的數(shù)組的結(jié)束符
    for (int i = 0, k = j - 1; i < k; i++) {
        if (s[i] != s[k])
            return false;
        else k--;
    }
    return true;
}

③不對數(shù)組進行修改,直接進行比較

bool Judge(char ch) {
    if ( (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')) {
        return true;
    }
    else {
        return false;
    }
}

bool isPalindrome(char * s){
    int j=strlen(s)-1;
    for(int i=0;s[i]!='\0';i++){ //遍歷數(shù)組,將大寫字符全部轉(zhuǎn)換成小寫字符
        if (s[i] >= 'A' && s[i] <= 'Z')  s[i]+=32;
    }
    for (int i = 0; s[i]!='\0'; i++) { 
        while(i<j){
            if(Judge(s[i])&&Judge(s[j])){
               if(s[i]!=s[j])  return false;
               i++; j--;
            }
            else if(!Judge(s[i])){
            i++;
            }
            else{
            j--;
            }
        }
    }
    return true;
}

?

到了這里,關(guān)于2023年7月2日leetcode每日一題打卡——125.驗證回文串的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • [LeetCode - Python]167.兩數(shù)之和 II (Medium);125. 驗證回文串(Easy)

    [LeetCode - Python]167.兩數(shù)之和 II (Medium);125. 驗證回文串(Easy)

    167.兩數(shù)之和 II (Medium) 125. 驗證回文串(Easy) 1.自己第一次寫: 2.看題解

    2024年02月14日
    瀏覽(20)
  • ( 動態(tài)規(guī)劃) 516. 最長回文子序列 ——【Leetcode每日一題】

    ( 動態(tài)規(guī)劃) 516. 最長回文子序列 ——【Leetcode每日一題】

    難度:中等 給你一個字符串 s ,找出其中最長的回文子序列,并返回該序列的長度。 子序列定義為:不改變剩余字符順序的情況下,刪除某些字符或者不刪除任何字符形成的一個序列。 示例 1: 輸入:s = “bbbab” 輸出:4 解釋:一個可能的最長回文子序列為 “bbbb” 。 示例

    2024年02月06日
    瀏覽(29)
  • ( 字符串) 647. 回文子串 ——【Leetcode每日一題】

    ( 字符串) 647. 回文子串 ——【Leetcode每日一題】

    難度:中等 給你一個字符串 s ,請你統(tǒng)計并返回這個字符串中 回文子串 的數(shù)目。 回文字符串 是正著讀和倒過來讀一樣的字符串。 子字符串 是字符串中的由連續(xù)字符組成的一個序列。 具有不同開始位置或結(jié)束位置的子串,即使是由相同的字符組成,也會被視作不同的子串

    2024年02月01日
    瀏覽(45)
  • LeetCode·每日一題·1177. 構(gòu)建回文串檢測·前綴和

    LeetCode·每日一題·1177. 構(gòu)建回文串檢測·前綴和

    作者:小迅 鏈接:https://leetcode.cn/problems/can-make-palindrome-from-substring/solutions/2309940/qian-zhui-he-zhu-shi-chao-ji-xiang-xi-by-n3ps/ 來源:力扣(LeetCode) 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 ? 題意 - 給定一個字符串,選擇其中任意位置 L-R,可以重

    2024年02月09日
    瀏覽(13)
  • (動態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    (動態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    難度:困難 給你一個字符串 s ,請你將 s 分割成一些子串,使每個子串都是回文。 返回符合要求的 最少分割次數(shù) 。 示例 1: 輸入:s = “aab” 輸出:1 解釋:只需一次分割就可將 s 分割成 [“aa”,“b”] 這樣兩個回文子串。 示例 2: 輸入:s = “a” 輸出:0 示例 3: 輸入:

    2024年02月15日
    瀏覽(43)
  • 【五一創(chuàng)作】( 字符串) 409. 最長回文串 ——【Leetcode每日一題】

    【五一創(chuàng)作】( 字符串) 409. 最長回文串 ——【Leetcode每日一題】

    難度:簡單 給定一個包含大寫字母和小寫字母的字符串 s ,返回 通過這些字母構(gòu)造成的 最長的回文串 。 在構(gòu)造過程中,請注意 區(qū)分大小寫 。比如 \\\"Aa\\\" 不能當做一個回文字符串。 示例 1: 輸入:s = “abccccdd” 輸出:7 解釋: 我們可以構(gòu)造的最長的回文串是\\\"dccaccd\\\", 它的長度是

    2024年02月01日
    瀏覽(19)
  • 125.驗證回文串

    125.驗證回文串

    目錄 一、題目 二、代碼 125. 驗證回文串 - 力扣(LeetCode)

    2024年02月14日
    瀏覽(16)
  • 【LeetCode每日一題】——946.驗證棧序列

    【LeetCode每日一題】——946.驗證棧序列

    棧 中等 946.驗證棧序列 給定 pushed 和 popped 兩個序列,每個序列中的 值都不重復(fù),只有當它們可能是在最初空棧上進行的推入 push 和彈出 pop 操作序列的結(jié)果時,返回 true;否則,返回 false 。 示例 1: 輸入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 輸出:true 解釋:我們可以按以下順

    2024年02月15日
    瀏覽(21)
  • LeetCode 每日一題 2023/7/24-2023/7/30

    記錄了初步解題思路 以及本地實現(xiàn)代碼;并不一定為最優(yōu) 也希望大家能一起探討 一起進步 7/24 771. 寶石與石頭 將寶石類型放入set中 一次判斷石頭中寶石個數(shù) 7/25 2208. 將數(shù)組和減半的最少操作次數(shù) 大頂堆記錄當前最大值 每次取最大值減半 7/26 2569. 更新數(shù)組后處理求和查詢

    2024年02月15日
    瀏覽(45)
  • LeetCode 每日一題 2023/7/10-2023/7/16

    記錄了初步解題思路 以及本地實現(xiàn)代碼;并不一定為最優(yōu) 也希望大家能一起探討 一起進步 7/10 16. 最接近的三數(shù)之和 排序 先確定一個最小數(shù) 雙指針確定之后兩個數(shù) 7/11 1911. 最大子序列交替和 dp dp[i][0/1] 表示第i個數(shù)坐標為偶數(shù)或奇數(shù)的最大交替和 dp[i][0]=max(dp[i-1][0],dp[i-1][1

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包