首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

字串轉數字編碼問題:Soundex 變體演算法實作詳解

     編輯:程式設計疑難解答

問題描述

輸入長度 ≤ 20 的字串,依規則轉換為數字串:

  • BFPV → 1
  • CGJKQSXZ → 2
  • DT → 3
  • L → 4
  • MN → 5
  • R → 6
  • AEIOUHWY → 忽略(不輸出)
  • 相鄰同碼只保留第一個

演算法流程

  1. 建立字元→數字映射表(陣列或 Map),忽略字元映射為 0 或 -1。
  2. 遍歷輸入字串,查表得碼 cur。
  3. 若 cur > 0 且 cur != prev,輸出 cur,更新 prev = cur。
  4. 忽略字元不更新 prev(關鍵:避免「A」隔開導致重複輸出)。

關鍵細節:忽略字元不重置 prev

// 正確邏輯
int prev = -1;
for (char c : input) {
    int cur = map[c];
    if (cur > 0) {
        if (cur != prev) output(cur);
        prev = cur;  // 只在輸出碼時更新
    }
    // 忽略字元:cur==0,不動作,prev 保持
}

例:KHAWN → K(2) H(忽略) A(忽略) W(忽略) N(5) → 輸出 25。若忽略字元重置 prev,則 N 會與 K 比較錯誤。

複雜度

  • 時間 O(L),L ≤ 20
  • 空間 O(1) 固定映射表

參考實作

CSDN 完整代碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved