填充部分:
請填補缺失的部分,使程式能夠正確執行並解出問題。
#include <bits/stdc++.h>
using namespace std;
set<string> exi_str; // 存儲已存在的字串集合
string k, s, exist;
int l, i, j;
vector<char> word; // 用來儲存當前的字母組合
void dfs() {
// 當字串長度達到指定長度時,進行處理
if (word.size() == l) {
string word_str;
// 將當前的字符組合轉為字串
// 填補這裡的程式碼
// 如果該字串不在已知集合中,丟出該字串
if ( /* 判斷該字串是否存在於 exi_str 中 */ ) {
throw word_str;
}
return; // 若已檢查完畢,結束遞迴
}
// 遍歷字串 k,嘗試添加下一個字符
for (char c : k) {
// 填補將字母加入當前組合的程式碼
// 呼叫遞迴繼續產生下個字符
dfs();
// 移除當前字母,回到上一層
// 填補將字母移除的程式碼
}
}
int main() {
getline(cin, k); // 讀取所有可用字符
cin >> l; // 讀取目標字串長度
cin.ignore(); // 忽略換行符
getline(cin, s); // 讀取已存在的字串集合
// 將字串 s 切分成長度為 l 的子字串,並加入 exi_str
for(i = 0; i+l-1 < s.size(); i++){
for(j = 0; j < l; j++){
// 填補將子字串構造並加入 exi_str 的程式碼
}
// 清空臨時變數,準備處理下一個子字串
exist = "";
}
// 呼叫 DFS 開始搜索並找出不在已知集合中的字串
try {
dfs();
} catch (string ans) {
cout << ans << endl; // 輸出第一個符合條件的字串
}
}
你需要填補的部分主要包括:
exi_str
中。s
中提取長度為 l
的子字串。dfs()
函數是遞迴的核心,你需要理解如何利用遞迴進行全排列的探索,並檢查哪些組合符合條件。