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

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

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

題目描述

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

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

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

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

提示:

  • 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 進行交換字符;
  • 重復步驟 3 直至遍歷完整個字符串。

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

復雜度分析

  • 時間復雜度:O(n),其中 n 為字符串 s 的長度,需要遍歷兩遍字符串。
  • 空間復雜度: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)文章

  • 詳解編譯器編譯原理

    詳解編譯器編譯原理

    這篇文章主要介紹了詳解編譯器編譯原理的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++ TensorflowLite模型驗證的過程詳解

    C++ TensorflowLite模型驗證的過程詳解

    這篇文章給大家介紹了C++ TensorflowLite模型驗證的過程,測試代碼,主要是RunInference()和read_file(),詳細操作過程跟隨小編一起看看吧
    2021-08-08
  • C/C++ 原生API實現(xiàn)線程池的方法

    C/C++ 原生API實現(xiàn)線程池的方法

    線程池,簡單來說就是有一堆已經(jīng)創(chuàng)建好的線程,接下來通過本文給大家介紹C/C++ 原生API實現(xiàn)線程池的方法,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • Qt計時器使用方法詳解

    Qt計時器使用方法詳解

    這篇文章為大家詳細主要介紹了Qt計時器的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言中const和指針的秘密你知道嗎

    C語言中const和指針的秘密你知道嗎

    這篇文章主要為大家詳細介紹了C語言中const和指針的秘密,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ Leetcode實現(xiàn)從英文中重建數(shù)字

    C++ Leetcode實現(xiàn)從英文中重建數(shù)字

    本文主要介紹了當給你一個字符串s,其中包含字母順序打亂的用英文單詞表示的若干數(shù)字(0-9)時,如何通過Leetcode按升序返回原始的數(shù)字。感興趣的童鞋可以來看看
    2021-11-11
  • C++語義copy and swap示例詳解

    C++語義copy and swap示例詳解

    這篇文章主要為大家介紹了C++語義copy and swap示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 利用C++求解八數(shù)碼問題實例代碼

    利用C++求解八數(shù)碼問題實例代碼

    所謂八數(shù)碼問題是指這樣一種游戲,將分別標有數(shù)字1,2,3,…,8的八塊正方形數(shù)碼牌任意地放在一塊3×3的數(shù)碼盤上,放牌時要求不能重疊,下面這篇文章主要給大家介紹了關(guān)于利用C++求解八數(shù)碼問題的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • C語言全面細致講解文件操作

    C語言全面細致講解文件操作

    這篇文章主要為大家詳細介紹了C語言的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-05-05
  • exec()函數(shù)在C++中的應用及其用法

    exec()函數(shù)在C++中的應用及其用法

    exec()函數(shù)在C++中是一個進程控制函數(shù),用于創(chuàng)建新進程執(zhí)行其他程序或命令行指令。exec()函數(shù)可以替換當前進程的代碼和數(shù)據(jù),創(chuàng)建新的進程運行其他程序。exec()函數(shù)有多個版本,例如execl、execv、execle、execve等,根據(jù)不同的參數(shù)類型和個數(shù)來使用
    2023-05-05

最新評論