華為OD機試_2025 B卷_字符串重新排列(Python,100分)(附詳細解題思路)

題目描述

給定一個字符串s,s包括以空格分隔的若干個單詞,請對s進行如下處理后輸出:
1、單詞內部調整:對每個單詞字母重新按字典序排序
2、單詞間順序調整:
1)統計每個單詞出現的次數,并按次數降序排列
2)次數相同,按單詞長度升序排列
3)次數和單詞長度均相同,按字典升序排列

請輸出處理后的字符串,每個單詞以一個空格分隔。

輸入描述
一行字符串,每個字符取值范圍:[a-zA-z0-9]以及空格,字符串長度范圍:[1,1000]

輸出描述
輸出處理后的字符串,每個單詞以一個空格分隔。

用例

輸入This is an apple
輸出an is This aelpp
說明
輸入My sister is in the house not in the yard
輸出in in eht eht My is not adry ehosu eirsst
說明

單詞處理與排序算法詳解

核心解題思路

本題需要對字符串中的單詞進行雙重處理:單詞內部字符排序和單詞間多重排序。解題關鍵在于:

  1. 單詞內部處理:對每個單詞的字符重新按字典序排序
  2. 單詞間排序:按照三重規則排序
    • 規則1:按單詞出現頻率降序排列
    • 規則2:頻率相同則按單詞長度升序排列
    • 規則3:長度相同則按字典序升序排列

處理流程

  1. 分割字符串:將輸入字符串按空格分割成單詞列表
  2. 單詞內部排序:對每個單詞的字符進行字典序排序
  3. 統計頻率:計算每個處理后的單詞出現次數
  4. 多重排序:按照三重規則對單詞列表排序
  5. 結果拼接:將排序后的單詞用空格連接

完整代碼實現

def process_string(s):# 1. 分割字符串為單詞列表words = s.split()# 2. 對每個單詞內部字符排序sorted_words = []for word in words:# 將單詞轉為字符列表排序后重新組合sorted_word = ''.join(sorted(word))sorted_words.append(sorted_word)# 3. 統計處理后的單詞頻率from collections import Counterword_freq = Counter(sorted_words)# 4. 多重排序:頻率降序 > 長度升序 > 字典序升序# 使用元組作為排序鍵:(-頻率, 長度, 單詞)sorted_list = sorted(sorted_words,key=lambda word: (-word_freq[word], len(word), word))# 5. 拼接最終結果return ' '.join(sorted_list)# 主程序
if __name__ == "__main__":input_str = input().strip()output = process_string(input_str)print(output)

算法原理解析

1. 單詞內部排序

sorted_word = ''.join(sorted(word))
  • sorted(word):將單詞拆分為字符列表并按ASCII值排序
  • ''.join():將排序后的字符重新組合為字符串
  • 示例
    • “apple” → [‘a’,‘p’,‘p’,‘l’,‘e’] → 排序為[‘a’,‘e’,‘l’,‘p’,‘p’] → “aelpp”
    • “This” → [‘T’,‘h’,‘i’,‘s’] → 排序為[‘T’,‘h’,‘i’,‘s’] → “This” (已有序)

2. 頻率統計

from collections import Counter
word_freq = Counter(sorted_words)
  • Counter類高效統計單詞出現次數
  • 返回字典:{單詞: 出現次數}
  • 示例:對于輸入[“in”, “eht”, “in”] → 頻率統計為{‘in’:2, ‘eht’:1}

3. 多重排序

key=lambda word: (-word_freq[word], len(word), word)
  • 第一關鍵字-word_freq[word]
    • 負號實現降序效果(頻率越高,負值越小)
    • 示例:頻率2變為-2,頻率1變為-1,-2 < -1 → 頻率2排在前面
  • 第二關鍵字len(word)
    • 按單詞長度升序排列
    • 長度短的單詞排在前面
  • 第三關鍵字word
    • 按字典序升序排列
    • 字典序小的單詞排在前面(按字符ASCII值比較)

示例解析

示例1:輸入"This is an apple"

  1. 單詞內部排序

    • “This” → “This”(字符已有序)
    • “is” → “is”
    • “an” → “an”
    • “apple” → “aelpp”
  2. 頻率統計

    • 所有單詞出現1次
  3. 多重排序

    • 頻率相同 → 比較長度
    • 長度:“an”(2)、“is”(2) < “This”(4) < “aelpp”(5)
    • "an"和"is"長度相同 → 比較字典序:“an” < “is”(‘a’(97) < ‘i’(105))
  4. 最終排序

    • [“an”, “is”, “This”, “aelpp”]
    • 輸出:“an is This aelpp”

示例2:輸入"My sister is in the house not in the yard"

  1. 單詞內部排序

    • “My” → “My”
    • “sister” → “eirsst”
    • “is” → “is”
    • “in” → “in”(兩次)
    • “the” → “eht”(兩次)
    • “house” → “ehosu”
    • “not” → “not”
    • “yard” → “adry”
  2. 頻率統計

    • “in”:2, “eht”:2, 其他單詞:1
  3. 多重排序

    • 頻率降序:"in"和"eht"優先(頻率2 > 1)
    • 長度升序
      • “in”(2) < “eht”(3)(長度短的在前)
      • 其他單詞:(“My”:2, “is”:2) < “not”:3 < “adry”:4 < “ehosu”:5 < “eirsst”:6
    • 字典序升序
      • "in"和"eht"內部相同
      • “My” < “is”(‘M’(77) < ‘i’(105))
  4. 最終排序

    • [“in”,“in”,“eht”,“eht”,“My”,“is”,“not”,“adry”,“ehosu”,“eirsst”]
    • 輸出:“in in eht eht My is not adry ehosu eirsst”

總結

實際應用

  1. 文本分析:詞頻統計與排序
  2. 數據清洗:統一單詞格式
  3. 搜索引擎:搜索結果排序
  4. 自然語言處理:詞匯規范化
  5. 日志分析:高頻事件識別

通過這個解法,初學者可以掌握:

  • 字符串操作的核心技巧
  • 多重排序的實現方法
  • 頻率統計的高效方式
  • 復雜問題的分解思路
  • Python內置函數的靈活應用

這種"分治+排序"的方法是處理字符串排序問題的通用模式,理解后可以擴展到更復雜的文本處理場景中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84976.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

http的緩存問題

一句話概括&#xff1a;瀏覽器請求資源的時候&#xff0c;會首先檢查本地是否有緩存&#xff0c;減少向服務器請求的次數 一、緩存類型&#xff1a; 1. 強緩存&#xff08;本地緩存&#xff09;&#xff1a;直接讀本地&#xff0c;不發請求 控制方式&#xff1a; ① Cache-C…

【網絡安全】SRC漏洞挖掘思路/手法分享

文章目錄 Tip1Tip2Tip3Tip4Tip5Tip6Tip7Tip8Tip9Tip10Tip11Tip12Tip13Tip14Tip15Tip16Tip17Tip18Tip19Tip20Tip21Tip22Tip23Tip24Tip25Tip26Tip27Tip28Tip29Tip30Tip1 “復制該主機所有 URL”:包含該主機上的所有接口等資源。 “復制此主機里的鏈接”:包括該主機加載的第三…

「Linux中Shell命令」Shell常見命令

知識點及案例解析 1. who 命令 功能:顯示當前登錄系統的用戶信息,包括用戶名、終端、登錄時間、IP等。 案例: who輸出示例: root tty1 2025-06-13 19:42 root pts/0 2025-06-13 19:45 (192.168.226.1)解析: 顯示兩個用戶登錄信息: 第一列(用…

StampedLock入門教程

文章目錄 一、理解“戳” (Stamp)二、為什么 StampedLock 能提高讀性能&#xff1f;秘密在于“樂觀讀”StampedLock性能對比性能對比結果圖 總結 StampedLock完整演示代碼對代碼的疑問之處問題一&#xff1a;為什么 demonstrateOptimisticReadFailure 中寫線程能修改成功&#…

基于云計算的振動弦分析:諧波可視化與波動方程參數理解-AI云計算數值分析和代碼驗證

振動弦方程是一個基礎的偏微分方程&#xff0c;它描述了彈性弦的橫向振動。其應用范圍廣泛&#xff0c;不僅可用于模擬樂器和一般的波動現象&#xff0c;更是數學物理以及深奧的弦理論中的重要基石。 ??AI云計算數值分析和代碼驗證 振動弦方程是描述固定兩端彈性弦橫向振動的…

Qt .pro配置gcc相關命令(三):-W1、-L、-rpath和-rpath-link

目錄 1.Linux 動態庫相關知識 1.1.動態庫查找路徑 1.2.查看程序依賴的動態庫 1.3.修改動態庫查找路徑的方法 1.4.動態鏈接器緩存管理 2.-Wl參數 3.-L選項&#xff08;編譯時路徑&#xff09; 4.-rpath參數(運行時路徑) 5.-rpath-link 參數 6.常見問題與解決方案 7.總…

Hoppscotch

官方地址 xixiaxiazxiaxix下載 ? Hoppscotch Hoppscotch 是一款輕量級、基于 Web 的 API 開發套件&#xff0c;其核心功能和特點如下&#xff1a; 核心功能3 交互式 API 測試&#xff1a;允許用戶實時發送請求并查看響應&#xff0c;方便記錄 API 行為&#xff0c;在記錄響…

RabbitMQ 知識詳解(Java版)

RabbitMQ 知識詳解&#xff08;Java版&#xff09; RabbitMQ 是一個開源的消息代理&#xff0c;實現了高級消息隊列協議&#xff08;AMQP&#xff09;。它用于在分布式系統中實現應用解耦、異步通信和流量削峰。 核心概念 生產者(Producer)&#xff1a;發送消息的應用消費者(…

Flink task、Operator 和 UDF 之間的關系

要真正駕馭 Flink 并構建出高效、穩定、可擴展的流處理應用&#xff0c;僅僅停留在 API 的表面使用是遠遠不夠的。深入理解其內部的運行機制&#xff0c;洞悉數據從代碼到分布式執行的完整生命周期&#xff0c;以及明晰各個核心組件之間錯綜復雜而又協同工作的關系&#xff0c;…

Veeam Backup Replication系統的安裝與使用

Veeam Backup & Replication系統安裝與使用 系統簡介 核心功能 備份與恢復&#xff1a;專注于虛擬化環境&#xff08;如VMware和Hyper-V&#xff09;的備份與恢復&#xff0c;支持物理服務器和云環境。快速恢復&#xff1a;提供即時恢復功能&#xff0c;可在幾分鐘內恢復…

十四、【ESP32全棧開發指南:搭建輕量級HTTP服務器】

一、HTTP協議基礎 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;作為互聯網基礎協議&#xff0c;采用請求-響應模型工作&#xff1a; 1.1 HTTP請求組成 GET /uri?query1value1 HTTP/1.1 // 請求行&#xff08;方法URI協議版本&#xff09; Host: example…

java中LinkedList和ArrayList的區別和聯系?

我們被要求解釋Java中LinkedList和ArrayList的區別和聯系。下面將分別從實現原理、性能特點、使用場景等方面進行詳細說明&#xff0c;并總結它們的相同點和不同點。 # 一、聯系&#xff08;共同點&#xff09; 1. 都實現了List接口&#xff0c;因此具有List接口的所有方法&…

明遠智睿SD2351核心板:邊緣計算時代的工業級核心引擎深度解析

在工業4.0與物聯網深度融合的背景下&#xff0c;邊緣計算設備正從單一功能模塊向高集成度、智能化平臺演進。明遠智睿推出的SD2351核心板&#xff0c;憑借其異構計算架構、工業級接口資源和全棧技術生態&#xff0c;重新定義了邊緣計算設備的性能邊界。本文將從技術架構、場景適…

Flask 動態模塊注冊

目錄 1. 項目概述2. 項目結構3. 核心組件解析3.1 動態模塊注冊系統 (api/__init__.py)3.2 應用程序入口 (setup_demo.py) 4. 模塊開發指南4.1 標準模塊 (*_app.py)4.2 SDK模塊 (sdk/*.py) 5. URL路徑規則6. 如何使用6.1 啟動應用6.2 添加新模塊 7. 工作原理 1. 項目概述 這個項…

JVM 內存、JMM內存與集群機器節點內存的聯系

目錄 1、JVM 內存 1.1、分配機制 1.2、jvm模型位置 1.3、字節碼內存塊 2、JMM內存 2.1、JMM模型 2.2、工作流程圖 1、工作內存與主內存的交互 2. 多線程下的主內存與堆內存交互 2.3、 主內存與工作內存的同步方案 1、volatile 2、synchronized 3、final 3、內存使…

學習昇騰開發的第一天--環境配置

1、昇騰社區官網&#xff1a;昇騰社區官網-昇騰萬里 讓智能無所不及 2、產品-->選擇開發者套件-->點擊制卡工具的下載&#xff1a;資源-Atlas 200I DK A2-昇騰社區 3、如果制卡工具不能使用在線制卡&#xff0c;可以下載鏡像到本地使用本地制卡&#xff1a;Linux系統制…

Android WebView 深色模式適配方案總結

Android WebView 深色模式適配方案總結 在 Android WebView 中適配深色模式&#xff08;Dark Mode&#xff09;是一個常見的需求&#xff0c;尤其是當加載的網頁沒有原生支持 prefers-color-scheme 時。本文將介紹 3 種主流方案&#xff0c;并分析它們的優缺點&#xff0c;幫助…

項目練習:使用mybatis的foreach標簽,實現union all的拼接語句

文章目錄 一、需求說明二、需求分析三、代碼實現四、報表效果 一、需求說明 在sql查詢數據后&#xff0c;對數據分組統計。并最后進行總計。 二、需求分析 最終&#xff0c;我想用sql來實現這個統計和查詢的功能。 那么&#xff0c;怎么又查詢&#xff0c;又統計了&#xf…

7.7 Extracting and saving responses

Chapter 7-Fine-tuning to follow instructions 7.7 Extracting and saving responses 在本節中&#xff0c;我們保存測試集響應以便在下一節中評分&#xff0c;除此之外保存模型的副本以供將來使用。 ? 首先&#xff0c;讓我們簡單看看finetuned模型生成的響應 torch.manu…

計算機網絡第3章(上):數據鏈路層全解析——組幀、差錯控制與信道效率

目錄 一、數據鏈路層的功能二、組幀2.1 字符計數法&#xff08;Character Count&#xff09;2.2 字符填充法&#xff08;Character Stuffing&#xff09;2.3 零比特填充法2.4 違規編碼法 三、差錯控制3.1 檢錯編碼&#xff08;奇偶校驗碼&#xff09;3.2 循環冗余校驗&#xff…