华为OD机试2025C卷-字符统计及重排[100分]( Java _ Python3 _ C++ _ C语言 _ JsNode _ Go)实现100%通过率

华为OD机试2025C卷-字符统计及重排[100分]( Java _ Python3 _ C++ _ C语言 _ JsNode _ Go)实现100%通过率 个人主页深夜coding算法 专栏系列2026年华为最新OD机试题库详解 一次订阅永久解锁 | 持续更新100篇 | 6语言全覆盖文章目录❄️前言☀️一题目描述 题目名称 题目内容 输入描述 输出描述 示例☀️二解题思路☀️三代码实现CJavaPython3C语言JavaScriptGo☀️四复杂度分析⭐ 五易错点坑1ASCII码排序规则坑2不要漏掉数字共勉❄️前言统计频率 自定义排序OD机试最爱考的组合。先数数再排序再加点花样。两步分开做别混在一起。☀️一题目描述 题目名称字符统计及重排 题目内容给定一个字符串包含字母和数字。请统计每个字符出现的次数并按要求重新排列输出按照出现次数由大到小排序出现次数相同时如果是字母按ASCII码从小到大排列如果是数字按ASCII码从小到大排列如果次数相同且都是字母或都是数字统一按 ASCII 从小到大排列。 输入描述输入一个字符串S长度不超过 1000。 输出描述按规则输出重新排列后的字符串每个字符后跟出现次数。 示例输入 xyxyXX 输出 x:2;y:2;X:2;说明x出现2次y出现2次X出现2次。次数相同按ASCII排序X88, x120, y121。☀️二解题思路两步走统计用哈希表或 int[128] 数组记录每个字符的出现次数排序自定义比较器次数降序→ASCII升序☀️三代码实现C#includeiostream#includestring#includevector#includealgorithmusingnamespacestd;intmain(){string s;cins;intcnt[128]{0};for(charc:s)cnt[c];vectorpairchar,intv;for(inti0;i128;i)if(cnt[i]0)v.push_back({(char)i,cnt[i]});sort(v.begin(),v.end(),[](autoa,autob){if(a.second!b.second)returna.secondb.second;// 次数降序returna.firstb.first;// ASCII升序});for(autop:v)coutp.first:p.second;;coutendl;}Javaimportjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringssc.nextLine();int[]cntnewint[128];for(charc:s.toCharArray())cnt[c];Listint[]listnewArrayList();for(inti0;i128;i)if(cnt[i]0)list.add(newint[]{i,cnt[i]});list.sort((a,b)-b[1]!a[1]?b[1]-a[1]:a[0]-b[0]);for(int[]p:list)System.out.print((char)p[0]:p[1];);System.out.println();}}Python3sinput().strip()cnt{}forcins:cnt[c]cnt.get(c,0)1itemssorted(cnt.items(),keylambdax:(-x[1],x[0]))forch,ninitems:print(f{ch}:{n};,end)print()C语言#includestdio.h#includestring.h#includestdlib.htypedefstruct{charch;intcnt;}Item;intcmp(constvoid*a,constvoid*b){Item*x(Item*)a,*y(Item*)b;if(x-cnt!y-cnt)returny-cnt-x-cnt;returnx-ch-y-ch;}intmain(){chars[1024];scanf(%s,s);intcnt[128]{0};for(char*ps;*p;p)cnt[(int)*p];Item items[128];intn0;for(inti0;i128;i)if(cnt[i]0){items[n].chi;items[n].cntcnt[i];n;}qsort(items,n,sizeof(Item),cmp);for(inti0;in;i)printf(%c:%d;,items[i].ch,items[i].cnt);printf(\n);}JavaScriptconstsrequire(fs).readFileSync(0,utf-8).trim();constcnt{};for(constcofs)cnt[c](cnt[c]||0)1;constitemsObject.entries(cnt).sort(([a,ca],[b,cb])cb-ca||a.localeCompare(b));console.log(items.map(([ch,n])${ch}:${n};).join());Gopackagemainimport(fmt;sort)funcmain(){varsstringfmt.Scan(s)cnt:make(map[rune]int)for_,c:ranges{cnt[c]}typeitemstruct{chrune;nint}items:[]item{}forch,n:rangecnt{itemsappend(items,item{ch,n})}sort.Slice(items,func(i,jint)bool{ifitems[i].n!items[j].n{returnitems[i].nitems[j].n}returnitems[i].chitems[j].ch})for_,it:rangeitems{fmt.Printf(%c:%d;,it.ch,it.n)}fmt.Println()}☀️四复杂度分析指标数值时间复杂度O(N KlogK)K为字符种类数≤128空间复杂度O(K)⭐ 五易错点坑1ASCII码排序规则次数相同按ASCII从小到大。注意大小写字母 ASCII 不同大写字母65-90排在小写字母97-122前面。坑2不要漏掉数字输入可能含数字字符和字母一样统计排在字母前面数字ASCII 48-57。共勉哈希统计 自定义排序OD机试最经典的组合拳。练熟这道类似的题都能套。关于本专栏一次订阅永久解锁全部100篇真题详解6语言全覆盖Java | Python3 | C | C语言 | JsNode | Go