日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

找出一个字符串中出现次数最多的字_487,重构字符串

發布時間:2023/12/2 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 找出一个字符串中出现次数最多的字_487,重构字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

想了解更多數據結構以及算法題,可以關注微信公眾號“數據結構和算法”,每天一題為你精彩解答。

問題描述

給定一個字符串S,檢查是否能重新排布其中的字母,使得兩相鄰的字符不同。

若可行,輸出任意可行的結果。若不可行,返回空字符串。

示例 1:

輸入: S = “aab”

輸出: “aba”

示例 2:

輸入: S = “aaab”

輸出: “”

注意:

  • S 只包含小寫字母并且長度在[1, 500]區間內。

問題分析

這題是讓重新排布字符串S中的字符,讓任何兩個相鄰的字符都不相同,如果能做到就返回排布后的字符串,如果做不到就返回空字符串。

如果要使得兩相鄰的字符不同,那么出現次數最多的那個數的數量必須滿足下面條件,如下圖所示,比如下面的a是出現次數最多的

這個時候a的數量已經達到了臨界值,如果再多一個a,那么至少有兩個a是相鄰的。所以這里出現次數最多的那個字符數量的臨界值是threshold = (length + 1) >> 1(其中 length 是字符串的長度)

如果能使得兩相鄰的字符不同,我們可以先把出現次數最多的那個字符放到新數組下標為偶數的位置上,也就是從數組的第一個位置開始放,放完之后在用其他的字符填充數組剩下的下標為偶數的位置,如果下標為偶數的位置都填滿了,我們就從下標為1開始,也就是數組的第2個位置開始,填下標為奇數的位置。

注意這里能不能先把出現次數最多的字符放到字符串下標為奇數的位置呢,當然是不可以的。比如我們上面舉的例子abacaba本來是可以滿足的,如果放到下標為奇數的位置,最后一個 a 就沒法放了,除非放到最前面,那又變成了放到下標為偶數的位置了。

代碼如下

public String reorganizeString(String S) { //把字符串S轉化為字符數組 char[] alphabetArr = S.toCharArray(); //記錄每個字符出現的次數 int[] alphabetCount = new int[26]; //字符串的長度 int length = S.length(); int max = 0, alphabet = 0, threshold = (length + 1) >> 1; //找出出現次數最多的那個字符 for (int i = 0; i < length; i++) { alphabetCount[alphabetArr[i] - 'a']++; if (alphabetCount[alphabetArr[i] - 'a'] > max) { max = alphabetCount[alphabetArr[i] - 'a']; alphabet = alphabetArr[i] - 'a'; //如果出現次數最多的那個字符的數量大于閾值, // 說明他不能使得兩相鄰的字符不同, // 直接返回空字符串即可 if (max > threshold) return ""; } } //到這一步說明他可以使得兩相鄰的字符不同, // 我們隨便返回一個結果,res就是返回 //結果的數組形式,最后會再轉化為字符串的 char[] res = new char[length]; int index = 0; //先把出現次數最多的字符存儲在數組下標為偶數的位置上 while (alphabetCount[alphabet]-- > 0) { res[index] = (char) (alphabet + 'a'); index += 2; } //然后再把剩下的字符存儲在其他位置上 for (int i = 0; i < alphabetCount.length; i++) { while (alphabetCount[i]-- > 0) { //如果偶數位置填完了,我們就讓index從1開始, // 填充下標為奇數的位置 if (index >= res.length) { index = 1; } res[index] = (char) (i + 'a'); index += 2; } } return new String(res);}

總結

這題直接判斷比較簡單,我們只需要統計出出現次數最多的字符即可。但這題還要返回結果,所以最簡單的方式就是把出現次數最多的字符從數組的第一個位置開始放,每隔一個放一次。放完之后再用其他的字符從后面接著放,也是每隔一個,如果超出數組之后再從數組的第2個位置開始放,也是每隔一個,這樣就能保證結果一定不會出錯,并且也少了很多的判斷。

總結

以上是生活随笔為你收集整理的找出一个字符串中出现次数最多的字_487,重构字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 非洲黑人毛片 | 熟妇高潮一区二区三区 | 男生坤坤放进女生坤坤里 | 美女扒开下面让男人捅 | 操欧美女人 | 国产精品丝袜在线 | 亚洲欧美日韩精品色xxx | 小柔的淫辱日记(1~7) | 免费成人在线网站 | 火影忍者羞羞漫画 | av网天堂 | 天天cao| 一区二区高清在线观看 | 午夜肉伦伦 | 97超碰人人在线 | 4444亚洲人成无码网在线观看 | 伊人婷婷色| 久久中文一区 | 欧美一级网站 | 五月激情综合婷婷 | 男女av网站 | 亚洲永久无码精品一区二区 | 欧美一区二区三区在线看 | 婷久久 | 天堂中文在线观看视频 | 黄片毛片在线观看 | 国产福利久久 | 成人免费在线观看网站 | 欧美人妻精品一区二区免费看 | 91精品国产高清一区二区三蜜臀 | 亚洲精品福利在线观看 | 麻豆中文字幕 | 精品无码在线观看 | av美国| 成人免费视频软件网站 | 免费欧美一区 | 国产女主播在线 | 成人h动漫精品一区二 | 日韩精品在线观看一区二区三区 | 极品粉嫩国产18尤物 | 亚洲美女综合网 | 久久久成人免费视频 | 看看黄色片 | 中文 欧美 日韩 | 精品亚洲国产成人av制服丝袜 | 久久久久免费精品 | 少妇高潮21p | 丁香六月婷婷综合 | 国产美女免费 | 国产免费av网 | 精品一区精品二区 | 欧美国产日韩精品 | 久久综合91| av在线播放一区二区三区 | 99视频99 | 国产一区二区观看 | 91麻豆精品国产91久久久久久久久 | 无码国产精品一区二区免费16 | 性感美女在线观看 | 武林美妇肉伦娇喘呻吟 | 一级片久久 | av在线不卡一区 | 一区二区导航 | 四虎黄色网 | 青娱乐91 | 日本欧美色 | 久久久91精品国产一区二区三区 | 波多野结衣理论片 | 亚洲欧美日韩在线一区 | 一区二区美女视频 | 男人激情网 | 久久久久国产一区二区 | 欧美日韩一区二区三区不卡 | 在线观看v片 | 欧美一级在线观看视频 | 操你啦免费视频 | 伊人狠狠操 | 成人欧美一区二区 | 天堂资源网 | 国产一区二区亚洲 | 日韩在线视频网 | 日韩videos| 午夜视频福利在线观看 | 99精品视频免费观看 | 超碰2023| 亚洲一区电影网 | 男人影院在线观看 | 精品午夜一区二区 | 精品人妻在线播放 | 欧美日韩电影一区二区 | 欲色视频 | 国产在线视视频有精品 | 国产免费aa | 欧美经典一区 | 国产成人精品一区二区三区四区 | 日韩毛片网 | 久久久久久久久久久99 | 一级α片免费看刺激高潮视频 | 一级黄色短视频 |