演算法題分享:
問題概述:
有一天jerry給tom出了一道題來考驗他。
jerry給了tom乙個長度為2*
n的只包含小寫字母的字串,讓tom將這個字串任意挑選字元,將其分成兩個等長的字串a和b(對於乙個si不能同時被選到a和b中),然後a要和reverse(b)相同(a和反轉後的b相同),問這樣的方案數有多少?tom有些為難,所以請你來幫幫他吧。
輸入乙個正整數n,和乙個長度為2*n的字串。
輸出方案數。
示例1
輸入:
2"abba"
輸出:
4官方提供的解題思路:
本題的關鍵在於理解題意:所謂挑選n個字元變成a和b兩個字串,是指在原字串中抽出n個字元,這些字元的的順序保持不變,剩下字元的順序也保持不變,由此組成a和b兩個字串。
例如 "abcdef",挑選第2、3、5個字元,則分成 "bce" 和 "adf" 兩個串。
比方說xcccddcccxdd
從左往右列舉a字串的構成,如果令第乙個x屬於a,根據對稱性,倒數第三個字元x一定是屬於b;如此推導出末尾的dd一定屬於a,中間位置的dd一定屬於b,而且是b的頭兩個字元;然後左邊ccc一定a,右邊ccc一定是b,由此得出1種方案。令第乙個x屬於b也可以用同樣的方式得到1種方案。
用這個思路直接寫**不太好寫,可以通過列舉二進位制,固定左半邊的選擇情況,然後對於每乙個case,通過dfs搜尋右半邊有多少種合法組合,搜尋過程中利用對稱性進行剪枝。
對於字元全部相同case如"aaaaaaaa",因為過程中無法剪枝,會退化成2^(2*n)。對於這種case,答案就是 c(2n,n) ,預判一下直接返回即可
等待自己想出演算法更新中.....
專案實訓 day1
專案分析 本次實習實訓內容是實現驗證碼識別,使用神經網路和影象識別進行主要的邏輯處理,之後完成後端和前端的,對專案進行完整的展示。今日工作 第一天主要是對專案資料集部分進行了分析,描述產品系統產品的輸入經過什麼處理轉換為輸出,描述在產品系統中進行的基本操作。對於每一類功能或者有時對於每乙個功能,需要...
暑期專案開發實訓 Day1
2017年6月26日 周一 晴轉多雲 今天是軟體學院暑期專案實訓開營第一天。上午8點30分和9點40分,我院18個學生專案組分兩批,在辦公樓二樓報告廳聆聽了 初識華為軟體開發雲 講座。途中9點30分,兩批暑期實訓人員集體在教學樓階梯前合影留念。此次講座由企業人士張雄民先生擔綱,詳盡介紹了華為軟體開發...
暑期專案開發實訓 Day8
今天的工作相當的艱苦卓絕,因此過了零點才開始寫記錄。我計畫周一周二提交第三個demo,週三周四提交第四個demo,然後周五週六閉門練習演算法,週日晚上去南京大學報道。言歸正傳,第三個demo是my location,關於gps定位的。工作里程碑如下 01 gps coordinates 02 tag...