首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

UVA 760 DNA Sequencing:後綴數組求最長公共子串

     編輯:關於C++

題目大意

給兩個 DNA 字串(僅含 a, t, c, g),求最長公共子串,若有多個相同長度則按字典序輸出。字串長度 ≤ 300。

解法:後綴數組 + 高度數組

  1. 將兩字串用特殊字符連接:S = s1 + '$' + s2。
  2. 構建後綴數組 SA 和高度數組 Height。
  3. 遍歷 Height,找屬於不同原字串的相鄰後綴,記錄最大長度 L。
  4. 再次遍歷收集所有長度為 L 且來自不同字串的子串,去重並排序輸出。

關鍵代碼片段 (C++)

void build_sa(int s[], int n, int m) { ... } // 倍增法構建 SA
void getHeight(int s[], int n) { ... }       // 計算 Height
bool judge(int n, int len) { ... }           // 判斷是否存在長度為 len 的公共子串
// 主程序二分長度,收集結果
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved