最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C?C++?題解LeetCode1417重新格式化字符串

 更新時間:2022年10月19日 10:48:56   作者:Junkman丶  
這篇文章主要為大家介紹了C?C++?題解LeetCode1417重新格式化字符串,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

題目描述

題目鏈接:1417. 重新格式化字符串

給你一個混合了數(shù)字和字母的字符串 s,其中的字母均為小寫英文字母。

請你將該字符串重新格式化,使得任意兩個相鄰字符的類型都不同。也就是說,字母后面應(yīng)該跟著數(shù)字,而數(shù)字后面應(yīng)該跟著字母。

請你返回 重新格式化后 的字符串;如果無法按要求重新格式化,則返回一個 空字符串 。

提示:

  • 1?s.length?5001 
  • s 僅由小寫英文字母和/或數(shù)字組成。

示例 1:

輸入:s = "a0b1c2"
輸出:"0a1b2c"
解釋:"0a1b2c" 中任意兩個相鄰字符的類型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是滿足題目要求的答案。

示例 2:

輸入: s = "leetcode"
輸出: ""
解釋: "leetcode" 中只有字母,所以無法滿足重新格式化的條件。

示例 3:

輸入: s = "1229857369"
輸出: ""
解釋: "1229857369" 中只有數(shù)字,所以無法滿足重新格式化的條件。

示例 4:

輸入: s = "covid2019"
輸出: "c2o0v1i9d"

示例 5:

輸入: s = "ab123"
輸出: "1a2b3"

整理題意

題目給定一個字符串,僅包含小寫字母和數(shù)字,讓我們利用字符串中所給的這些字符構(gòu)造一個字符串,使得構(gòu)造出來的字符串中字母字符和數(shù)字字符不相鄰。答案返回任意一個滿足條件的字符串即可,如果無法構(gòu)造這樣的字符串返回空字符串。

解題思路分析

根據(jù)題目描述可知,為了使得字符串中不含有相鄰的字母和數(shù)字,我們盡可能的使得字母和數(shù)字交叉排列,那么當字符串中數(shù)字個數(shù)和字母個數(shù)的差值大于 1 時,無論我們怎么排列總會有兩個相同的字母字符或數(shù)字字符相鄰。

那么考慮當字符串中數(shù)字個數(shù)和字母個數(shù)的差值小于等于 1 時,我們將個數(shù)較多的種類字符放在偶數(shù)位置上,較少的字符種類放在奇數(shù)位置上(位置從 0 開始)。

具體實現(xiàn)

首先統(tǒng)計字符串中數(shù)字字符個數(shù)和字母字符個數(shù),并判斷兩者差值是否大于 1,大于 1 的情況直接返回空字符串。

雙指針 實現(xiàn)字符串排列:

  • 指針 i 指向偶數(shù)位置,j 指向奇數(shù)位置;
  • 初始化 i = 0, j = 1;
  • i 位置上的字符不為較多的字符種類時,利用 j 指針從左到右找到第一個較多的字符種類,與位置 i 進行交換字符;
  • 重復(fù)步驟 3 直至遍歷完整個字符串。

細節(jié)操作:代碼實現(xiàn)過程中僅用 if(isdigit(s[i]) != f) 這樣的判斷語句涵括了兩種情況的判斷。

復(fù)雜度分析

  • 時間復(fù)雜度:O(n),其中 n 為字符串 s 的長度,需要遍歷兩遍字符串。
  • 空間復(fù)雜度:O(1),僅使用常量空間。

代碼實現(xiàn)

class Solution {
public:
    string reformat(string s) {
        // 統(tǒng)計數(shù)字和字母的個數(shù)
        int sum_digit = 0, sum_alpha = 0;
        for(auto &c : s){
            if(isdigit(c)) sum_digit++;
            else sum_alpha++;
        }
        // 當個數(shù)差大于 1 時無法構(gòu)造
        if(abs(sum_digit - sum_alpha) > 1) return "";
        bool f = sum_digit > sum_alpha;
        int n = s.size();
        for(int i = 0, j = 1; i < n; i += 2){
            // 注意判斷語句的難點,和 f 有關(guān)
            if(isdigit(s[i]) != f){
                while(isdigit(s[j]) != f) j += 2;
                swap(s[i], s[j]);
            }
        }
        return s;
    }
};

總結(jié)

  • 該題為簡單的字符串題目,需要注意的是代碼實現(xiàn)過程中的判斷語句部分,isdigit(s[i]) != f 這樣一句判斷語句即可涵括兩種情況的判斷,且判斷語句需要根據(jù) f 的定義來寫。
  • 另外就是雙指針的思想,巧妙利用雙指針實現(xiàn)字符串的原地構(gòu)造。
  • 測試結(jié)果:

以上就是C C++ 題解LeetCode1417重新格式化字符串的詳細內(nèi)容,更多關(guān)于C C++ 重新格式化字符串的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實現(xiàn)LeetCode(188.買賣股票的最佳時間之四)

    C++實現(xiàn)LeetCode(188.買賣股票的最佳時間之四)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(188.買賣股票的最佳時間之四),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言簡析指針用途

    C語言簡析指針用途

    C語言這門課程在計算機的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-07-07
  • Matlab實現(xiàn)數(shù)據(jù)的動態(tài)顯示方法

    Matlab實現(xiàn)數(shù)據(jù)的動態(tài)顯示方法

    這篇文章主要為大家詳細介紹了Matlab使用Plot函數(shù)實現(xiàn)數(shù)據(jù)動態(tài)顯示方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C語言用遞歸函數(shù)對素數(shù)進行判斷流程

    C語言用遞歸函數(shù)對素數(shù)進行判斷流程

    素數(shù)判斷是編程語言學(xué)習(xí)過程中一個老生常談的話題,而它的實現(xiàn)也有多種算法,包括經(jīng)典的試除法(以及試除法的幾種優(yōu)化),進階的素數(shù)表篩選法,埃拉托斯特尼篩法和歐拉篩法(以及它們的優(yōu)化)等。對以上算法感興趣的朋友們,不妨搜索“素數(shù)判斷的N種境界”來學(xué)習(xí)了解
    2022-09-09
  • C++算法學(xué)習(xí)之回溯法的應(yīng)用

    C++算法學(xué)習(xí)之回溯法的應(yīng)用

    這篇文章介紹了C++算法中回溯法的一些應(yīng)用,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 基于C語言實現(xiàn)隨機點名器(附源碼)

    基于C語言實現(xiàn)隨機點名器(附源碼)

    這篇文章主要為大家詳細介紹如何基于C語言實現(xiàn)一個簡單的隨機點名器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下
    2022-07-07
  • Qt實現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    Qt實現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹SqlRelationalTable關(guān)聯(lián)表組件的常用方法及靈活運用,感興趣的可以了解一下
    2023-12-12
  • C++ 中 vector 的常用操作方法匯總

    C++ 中 vector 的常用操作方法匯總

    在C++的STL中,vector是一個動態(tài)數(shù)組,可以在運行時調(diào)整大小,本文介紹了vector的初始化、元素訪問、修改、迭代器操作、容量管理以及性能優(yōu)化技巧,通過這些操作,可以有效地使用vector管理數(shù)據(jù),本文介紹C++  vector 操作,感興趣的朋友一起看看吧
    2024-10-10
  • strcpy函數(shù)實現(xiàn)簡示例命分享

    strcpy函數(shù)實現(xiàn)簡示例命分享

    這篇文章主要介紹了strcpy函數(shù)實現(xiàn)簡示例命,需要的朋友可以參考下
    2014-03-03
  • 使用C語言實現(xiàn)五子棋游戲

    使用C語言實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了使用C語言實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

巨野县| 赣州市| 隆安县| 瓮安县| 南江县| 嘉鱼县| 伊金霍洛旗| 东兴市| 沁阳市| 肃宁县| 岚皋县| 东平县| 蒙城县| 民勤县| 治县。| 容城县| 阳信县| 香港 | 固安县| 镇巴县| 磐安县| 修文县| 孙吴县| 奉节县| 贡山| 鹤壁市| 彰化县| 万盛区| 许昌市| 米脂县| 白沙| 嫩江县| 宜丰县| 汕尾市| 巴中市| 柞水县| 郑州市| 赣州市| 许昌县| 肥东县| 兖州市|