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

c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III)

這篇具有很好參考價(jià)值的文章主要介紹了c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 415. 字符串相加

傳送門(mén)

題目詳情

c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III),c語(yǔ)言題目分享,c++,java,開(kāi)發(fā)語(yǔ)言,c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

代碼1

class Solution {
public:
    string addStrings(string num1, string num2) {
        int index1=num1.size()-1,index2=num2.size()-1;//找到最后一位
        int next=0;//進(jìn)位
        string retStr;
        while(index1>=0||index2>=0)//還有一個(gè)沒(méi)完就要進(jìn)來(lái):有可能一直進(jìn)位
        {
            int val1=0,val2=0; 
            if(index1>=0)
            {
                val1=num1[index1--]-'0';
            }
            if(index2>=0)
            {
                val2=num2[index2--]-'0';
            }
            int ret=next+val1+val2;//兩者相加后加上進(jìn)位數(shù)
            next=ret/10;//需要進(jìn)位就是1了,不需要就是0
            ret%=10;
            retStr.insert(0,1,'0'+ret);//頭插到新string
        }
        //最后有可能有1+9的情況,現(xiàn)在只會(huì)有0
        if(next==1)
        {
            retStr.insert(0,1,'1');
        }
        return retStr;
    }
};

思路1

  1. 首先,定義兩個(gè)指針 index1 和 index2 分別指向兩個(gè)輸入字符串的最后一位,用來(lái)從后往前遍歷字符串。
  2. 然后定義一個(gè)變量 next 用來(lái)表示進(jìn)位,初始化為 0。
  3. 接下來(lái)使用一個(gè)循環(huán)來(lái)遍歷兩個(gè)字符串,直到 index1 和 index2 都小于 0。在循環(huán)中,每次取出 index1 和 index2 對(duì)應(yīng)位置的數(shù)字,并將它們與進(jìn)位相加,得到一個(gè)臨時(shí)的結(jié)果 ret。
  4. 然后更新進(jìn)位 next 為 ret/10,并將 ret%10 插入到需要返回的字符串 retStr 的開(kāi)頭。
  5. 循環(huán)結(jié)束后,還需要檢查最后是否有進(jìn)位,如果有,需要將進(jìn)位插入到結(jié)果字符串的開(kāi)頭。

但此時(shí)還是有一個(gè)問(wèn)題的,那就是效率低(因?yàn)轭^插時(shí)間復(fù)雜度O(N^2));

代碼2

class Solution {
public:
    string addStrings(string num1, string num2) {
        int index1=num1.size()-1,index2=num2.size()-1;//找到最后一位
        int next=0;//進(jìn)位
        string retStr;
        while(index1>=0||index2>=0)//還有一個(gè)沒(méi)完就要進(jìn)來(lái):有可能一直進(jìn)位
        {
            int val1=0,val2=0; 
            if(index1>=0)
            {
                val1=num1[index1--]-'0';
            }
            if(index2>=0)
            {
                val2=num2[index2--]-'0';
            }
            int ret=next+val1+val2;//兩者相加后加上進(jìn)位數(shù)
            next=ret/10;//需要進(jìn)位就是1了,不需要就是0
            ret%=10;
            //使用尾插效率更好,尾插有append,這里我們使用+=
            retStr+='0'+ret;
        }
        //最后有可能有1+9的情況,現(xiàn)在只會(huì)有0
        if(next==1)
        {
            retStr+='1';
        }
        reverse(retStr.begin(),retStr.end());//尾插后,最后翻轉(zhuǎn)一下
        return retStr;
    }
};

思路2

整體思路都是一樣的,只不過(guò)有頭插換成了尾插+翻轉(zhuǎn)

2. 125. 驗(yàn)證回文串

傳送門(mén)

題目詳情

c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III),c語(yǔ)言題目分享,c++,java,開(kāi)發(fā)語(yǔ)言,c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

代碼1(按照要求修改后放到新string里)

class Solution {
public:
    bool isPalindrome(string s) {
        string re;
        for(auto e:s)//按照要求修改好
        {
            if((e>='A'&&e<='Z')||(e>='a'&&e<='z')||(e>='0'&&e<='9'))
            {
               if(e>='A'&&e<='Z')
                {
                    re+=(e+32);
                }
                else
                {
                    re+=e;
                }
            }
        }
        string modified(re);
        reverse(re.begin(),re.end());       
        //看看是否相同
        for(int i=0;i<modified.size();i++)
        {
            if(re[i]!=modified[i])
            {
                return false;
            }
        }
        return true;
    }

思路1

  1. 遍歷輸入字符串 s 中的每個(gè)字符 e。
    如果字符 e 是字母或數(shù)字,則根據(jù)題目要求將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母,并將其添加到新的字符串 re 中。

  2. 創(chuàng)建一個(gè)新的字符串 modified,它是字符串 re 的一個(gè)副本。

  3. 反轉(zhuǎn)字符串 re。

  4. 比較反轉(zhuǎn)后的字符串 re 和副本字符串 modified,如果它們不相等,則返回 false,表示不是回文字符串;如果它們相等,則返回 true,表示是回文字符串

代碼2(利用雙指針/索引)

bool isLetterOrNumber(char ch)
{
    return (ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9');
}

class Solution {
public:
    bool isPalindrome(string s) {
        for(auto& e:s)//大的變小的
        {
            if(e>='A'&&e<='Z')
            {
                e+=32;
            }
        }
        int begin=0;
        int end=s.size()-1;
        while(begin<end)
        {
            while(begin<end&&!isLetterOrNumber(s[begin]))
            {
                begin++;
            }
            while(begin<end&&!isLetterOrNumber(s[end]))
            {
                --end;
            }
            if(s[begin]!=s[end])
            {
                return false;
            }
            else
            {
                ++begin;
                --end;
            }
        }
        return true;
    }
};

思路2

  1. 創(chuàng)建一個(gè)輔助函數(shù) isLetterOrNumber,用于判斷一個(gè)字符是否是字母或數(shù)字。
  2. 遍歷輸入字符串 s 中的每個(gè)字符 e,將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母。
  3. 初始化兩個(gè)指針 begin 和 end,分別指向字符串的開(kāi)頭和結(jié)尾。
  4. 在一個(gè) while 循環(huán)中,不斷移動(dòng)指針 begin 和 end,直到兩個(gè)指針相遇。
    在移動(dòng)指針的過(guò)程中,跳過(guò)非字母和數(shù)字的字符。
  5. 在二者都是數(shù)字或者字母后,比較指針指向的字符,如果不相等,則返回 false,表示不是回文字符串;如果相等,則繼續(xù)移動(dòng)指針。
  6. 如果循環(huán)結(jié)束后都沒(méi)有返回 false,則說(shuō)明是回文字符串,返回 true。

3. 541. 反轉(zhuǎn)字符串 II

傳送門(mén)

題目詳情

c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III),c語(yǔ)言題目分享,c++,java,開(kāi)發(fā)語(yǔ)言,c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

代碼1

class Solution {
public:
    string reverseStr(string s, int k) {
        int len=s.size();
        for(int i=0;i<len;i+=2*k)
        {
            if(i+k<=len)//剩余字符小于 2k 但大于或等于 k 個(gè),則反轉(zhuǎn)前 k 個(gè)字符
                      //同時(shí)前面的2k區(qū)域不用管,直接滿足,只有最后那個(gè)不夠2k的區(qū)間才討論
            {
                reverse(s.begin()+i,s.begin()+i+k);
            }
            else{
                reverse(s.begin()+i,s.begin()+len);
            }
        }
        return s;
    }
};

思路1

利用每次要跳2k來(lái)處理:就直接i+=2k,這樣每次直接跳到下一個(gè)區(qū)間,前面夠2k的不用管,直接滿足i+k<=len,只有那最后一個(gè)不夠2k的需要討論(畢竟s.begin()+len是最后元素的下個(gè)位置)

4. 557. 反轉(zhuǎn)字符串中的單詞 III

傳送門(mén)

題目詳情

c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III),c語(yǔ)言題目分享,c++,java,開(kāi)發(fā)語(yǔ)言,c語(yǔ)言,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)

代碼1(利用find)

class Solution {
public:
    string reverseWords(string s) {
        size_t pos=0;
        int i=0;
        while(i<s.size())
        {
            pos=s.find(' ',i);
            if(pos==string::npos)//只有一個(gè)單詞了
            {
                reverse(s.begin()+i,s.end());
                break;
            }
            reverse(s.begin()+i,s.begin()+pos);
            i=(pos+1);
        }
        return s;
    }
};

思路1

總體思路是找到單詞的左和右索引,在這個(gè)區(qū)間內(nèi)進(jìn)行翻轉(zhuǎn)

  1. 利用一個(gè)i 對(duì)字符串進(jìn)行遍歷,pos來(lái)儲(chǔ)存找到的' '的下標(biāo)
  2. 那么從i到pos就是一個(gè)單詞加上’ ',正好滿足reserve()函數(shù)左閉右開(kāi)的性質(zhì)
  3. 然后i=pos+1(跳到空格后)
  4. 如果沒(méi)找到空格,就說(shuō)明只剩下一個(gè),或者只有一個(gè)單詞。 就直接iend()進(jìn)行翻轉(zhuǎn)了

代碼2(利用雙指針)

class Solution {
public:
    string reverseWords(string s) {
       int i=0;
       while(i<s.size())//直接進(jìn)循環(huán)
       {
           int left=i;//存一下起始位置
           while(i<s.size()&&s[i]!=' ')//找空格
           {
               i++;
           }
           //現(xiàn)在要么找到了,要么到size處了
           int right=i-1;
           while(left<right)//開(kāi)始換
           {
               swap(s[left],s[right]);
               left++;
               right--;
           }
           if(s[i]==' ')
           {
               i++;
           }
       }
       return s;
    }
};

思路2

總體思路是一樣的,不過(guò)自己找,沒(méi)有利用find


今天就到這里啦!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-819175.html

到了這里,關(guān)于c++:string相關(guān)的oj題(415. 字符串相加、125. 驗(yàn)證回文串、541. 反轉(zhuǎn)字符串 II、557. 反轉(zhuǎn)字符串中的單詞 III)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • LeetCode_字符串_簡(jiǎn)單_415.字符串相加

    給定兩個(gè)字符串形式的非負(fù)整數(shù) num1 和num2,計(jì)算它們的和并同樣以字符串形式返回。 你不能使用任何內(nèi)建的用于處理大整數(shù)的庫(kù)(比如 BigInteger), 也不能直接將輸入的字符串轉(zhuǎn)換為整數(shù)形式。 示例 1: 輸入:num1 = “11”, num2 = “123” 輸出:“134” 示例 2: 輸入:num1 = “

    2024年02月01日
    瀏覽(28)
  • LeetCode·每日一題·415. 字符串相加·模擬

    LeetCode·每日一題·415. 字符串相加·模擬

    作者:小迅 鏈接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/ 來(lái)源:力扣(LeetCode) 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 ? 題意 - 給定二個(gè)字符串,計(jì)算它們的和并同樣以字符串形式返回。 直接從

    2024年02月16日
    瀏覽(22)
  • String類即字符串的相關(guān)方法

    文章目錄 前言 一、字符串是什么? 二、使用方法 1.String類 2.字符串的相關(guān)方法 總結(jié) ? ? ? ? 眾所周知,現(xiàn)主流的編程語(yǔ)言都是以英文為計(jì)算機(jī)所識(shí)別,所以當(dāng)中國(guó)程序員想要?jiǎng)?chuàng)建一種,可以操縱中文的,數(shù)據(jù)類型時(shí),String字符串類型,便有了極大的幫助。 ? ? ? ? 字符串

    2024年02月08日
    瀏覽(16)
  • 【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    目錄 字符串相乘 題面 錯(cuò)誤記錄 Way1 拆分成“先乘后加” 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 反思 Way2 用數(shù)組 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)字符串中的單詞 題面 錯(cuò)誤記錄 思路1 遍歷找單詞 實(shí)現(xiàn) 思路2 暴力解法 實(shí)現(xiàn) 力扣(LeetCode)官網(wǎng) - 全球極客摯愛(ài)的技術(shù)成長(zhǎng)平

    2024年02月07日
    瀏覽(25)
  • 【C++ OJ練習(xí)】5.字符串最后一個(gè)單詞的長(zhǎng)度

    【C++ OJ練習(xí)】5.字符串最后一個(gè)單詞的長(zhǎng)度

    字符串最后一個(gè)單詞的長(zhǎng)度_??皖}霸_??途W(wǎng) 倒著找第一個(gè)空格的下標(biāo) 用下標(biāo)之間的差來(lái)計(jì)算 ?【C++ OJ練習(xí)】5.字符串最后一個(gè)單詞的長(zhǎng)度 完

    2024年02月13日
    瀏覽(31)
  • C++之string字符串比較方法

    C++之string字符串比較方法

    ???????????????? ??作者主頁(yè):楓霜?jiǎng)??? 系列專欄:C++實(shí)戰(zhàn)寶典 ?? 上一篇: C++之string字符串不同類型間轉(zhuǎn)換 ???????????????? ??逐夢(mèng)編程,讓中華屹立世界之巔。 ??簡(jiǎn)單的事情重復(fù)做,重復(fù)的事情用心做,用心的事情堅(jiān)持做; 字符串可以和類型相同的字

    2024年02月03日
    瀏覽(22)
  • C++ string判斷是否包含子字符串

    C++ string判斷是否包含子字符串

    C++的string類提供了字符串中查找另一個(gè)字符串的函數(shù)find。 其重載形式為: 功能為在string對(duì)象中,查找參數(shù)string類型的字符串是否存在,如果存在,返回起始位置。不存在則返回 string::npos 。

    2024年02月02日
    瀏覽(21)
  • 【C++】string字符串查找替換、比較、提取、插入和刪除

    Link 加油! 感謝! 努力!

    2024年02月12日
    瀏覽(25)
  • C++中如何將string(字符串)轉(zhuǎn)換為int(整數(shù))

    C++ 編程語(yǔ)言有一些內(nèi)置數(shù)據(jù)類型: int , 對(duì)于整數(shù)(例如 10、150) double ,對(duì)于浮點(diǎn)數(shù)(例如 5.0、4.5) char ,對(duì)于單個(gè)字符(例如“D”、“!”) string ,對(duì)于字符序列(例如“Hello”) bool , 對(duì)于布爾值(true 或 false) C++ 是一種 強(qiáng)類型 編程語(yǔ)言,這意味著當(dāng)您創(chuàng)建變量時(shí),你

    2024年02月06日
    瀏覽(88)
  • C++中求string類型字符串長(zhǎng)度的三種方法

    C++中求string類型字符串長(zhǎng)度的三種方法

    length()函數(shù)是string的內(nèi)置成員方,用于返回string類型字符串的實(shí)際長(zhǎng)度。 length()函數(shù)聲明: // 返回 string 長(zhǎng)度,單位字節(jié) size_t length() const noexcept; 示例1: size()函數(shù)與length()一樣,沒(méi)有本質(zhì)區(qū)別。string類剛開(kāi)始只有l(wèi)ength()函數(shù),延續(xù)了C語(yǔ)言的風(fēng)格。引入STL之后,為了兼容又加入

    2024年02月07日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包