Java解決刪除字符使頻率相同問(wèn)題
Java解決刪除字符使頻率相同問(wèn)題
01 題目
給你一個(gè)下標(biāo)從 0 開(kāi)始的字符串 word
,字符串只包含小寫英文字母。你需要選擇 一個(gè) 下標(biāo)并 刪除 下標(biāo)處的字符,使得 word
中剩余每個(gè)字母出現(xiàn) 頻率 相同。
如果刪除一個(gè)字母后,word
中剩余所有字母的出現(xiàn)頻率都相同,那么返回 true
,否則返回 false
。
注意:
- 字母
x
的 頻率 是這個(gè)字母在字符串中出現(xiàn)的次數(shù)。 - 你 必須 恰好刪除一個(gè)字母,不能一個(gè)字母都不刪除。
示例 1:
輸入:word = "abcc" 輸出:true 解釋:選擇下標(biāo) 3 并刪除該字母:word 變成 "abc" 且每個(gè)字母出現(xiàn)頻率都為 1 。
示例 2:
輸入:word = "aazz" 輸出:false 解釋:我們必須刪除一個(gè)字母,所以要么 "a" 的頻率變?yōu)?1 且 "z" 的頻率為 2 ,要么兩個(gè)字母頻率反過(guò)來(lái)。所以不可能讓剩余所有字母出現(xiàn)頻率相同。
提示:
2 <= word.length <= 100
word
只包含小寫英文字母。
02 知識(shí)點(diǎn)
- 雙重循環(huán)
- 哈希表set
03 我的解題思路
public class shuzu02 { public static void main(String[] args) { // 測(cè)試數(shù)據(jù) String word = "aazz"; System.out.println(equalFrequency(word)); } public static boolean equalFrequency(String word) { // 先循環(huán)整個(gè)字符串,并記錄每個(gè)字符出現(xiàn)的頻率 char[] chars=word.toCharArray(); int[] nums=new int[26]; for (int i = 0; i < chars.length; i++) { nums[chars[i]-'a']++; } // 雙重循環(huán)整個(gè)頻率記錄數(shù)組,思路是找到題設(shè)的題解(即字符只有兩種頻率,頻率高的字符需且僅需減一就等于頻率低的字符頻率) for (int i = 0; i < 26; i++) { // 遍歷整個(gè)數(shù)組,頻率為零則直接重新循環(huán),字符串長(zhǎng)度大于等于2,只有字符串長(zhǎng)度等于1時(shí)符合題設(shè) if (nums[i]==0) { continue; } // 頻率高的字符需且僅需減一,減一后若符合題解,整個(gè)數(shù)組頻率相同 nums[i]--; HashSet<Integer> setsHashSet=new HashSet<Integer>(); // 再次循環(huán)整個(gè)數(shù)組,利用HashSet內(nèi)元素不重復(fù)的特點(diǎn) for (int j = 0; j < 26; j++) { if (nums[j]>0) { setsHashSet.add(nums[j]); } } // 若HashSet內(nèi)元素?cái)?shù)量為1,則整個(gè)數(shù)組頻率相同,符合題設(shè) if (setsHashSet.size()==1) { return true; } // 不符合題設(shè)要把值改回原來(lái),繼續(xù)循環(huán) nums[i]++; } // 循環(huán)后找不到符合題解,符合false return false; } }
到此這篇關(guān)于Java解決刪除字符使頻率相同問(wèn)題的文章就介紹到這了,更多相關(guān)Java刪除字符頻率相同內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你排查解決Java編譯報(bào)錯(cuò):找不到符號(hào)
這篇文章主要介紹了手把手教你排查解決Java編譯報(bào)錯(cuò):找不到符號(hào)的相關(guān)資料,提供了排查步驟和解決方法,通過(guò)這些步驟,開(kāi)發(fā)者可以有效地找到并解決編譯器拋出的找不到符號(hào)錯(cuò)誤,從而提高開(kāi)發(fā)效率,需要的朋友可以參考下2025-04-04Java中的線程中斷機(jī)制和LockSupport詳解
這篇文章主要介紹了Java中的線程中斷機(jī)制和LockSupport詳解,在Java中沒(méi)有辦法立即停止一條線程,然而停止線程卻顯得尤為重要,如取消一個(gè)耗時(shí)操作,因此,Java提供了一種用于停止線程的協(xié)商機(jī)制中斷,也即中斷標(biāo)識(shí)協(xié)商機(jī)制,需要的朋友可以參考下2023-09-09spring的TransactionSynchronizationAdapter事務(wù)源碼解析
這篇文章主要介紹了spring的TransactionSynchronizationAdapter事務(wù)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Java中BufferedReader和BufferedWriter使用方式
這篇文章主要介紹了Java中BufferedReader和BufferedWriter使用方式,F(xiàn)ileWriter?類從?OutputStreamWriter?類繼承而來(lái),BufferedReader?類從字符輸入流中讀取文本并緩沖字符,以便有效地讀取字符,數(shù)組和行2022-06-06idea2020.1最新版永久破解/pycharm也可用(步驟詳解)
這篇文章主要介紹了idea2020.1最新版永久破解/pycharm也可用,本文給大家分享簡(jiǎn)單實(shí)現(xiàn)步驟,通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04基于Java實(shí)現(xiàn)收發(fā)電子郵件功能
Email就是電子郵件,我們平常使用的QQ郵箱,網(wǎng)易郵箱,F(xiàn)oxmail都是用來(lái)收發(fā)郵件的,利用Java程序也可以完成收發(fā)電子郵件的功能,本文就來(lái)為大家詳細(xì)講講實(shí)現(xiàn)步驟2022-07-07idea hibernate jpa 生成實(shí)體類的實(shí)現(xiàn)
這篇文章主要介紹了idea hibernate jpa 生成實(shí)體類的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11詳解Java中static關(guān)鍵字和內(nèi)部類的使用
這篇文章主要為大家詳細(xì)介紹了Java中static關(guān)鍵字和內(nèi)部類的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08