一:構造回文
題目描述
給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?
輸出需要刪除的字元個數。
樣例
輸入例子1
:abcda
google
輸出例子1:2
2
思路
問乙個字串刪除多少個字母後得到的回文串長度最大,就是問刪除最少多少個字元可以得到回文串, 根據回文串的特性, 問題可以轉化為:將字串翻轉後,求原串和翻轉串的最大公共子串行, 這個最長公共子串行就是最長的回文串,原串的長度減去子串行的長度就是最終答案。
**
#include
#include
#include
#include
using
namespace std;
const
int n =
1001
;int f[n]
[n];
string s1, s2;
intmain()
cout << n - f[n]
[n]<< endl;
}return0;
}
二:演算法基礎-字元移位
小q最近遇到了乙個難題:把乙個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。
樣例
輸入例子1
:aklebiceild
輸出例子1
:kleieilabcd
思路
掃瞄兩遍, 第一遍存小寫字母, 第二遍存大寫字母, 保證順序不變即可。
**
#include
#include
#include
#include
using
namespace std;
const
int n =
10010
;int f[n]
[n];
string s;
char ans[
11000];
intmain()
for(
int i =
0; i < s.
size()
; i++
)for
(int i =
0; i < cnt; i++
) cout << ans[i]
; cout << endl;
}return0;
}
三:有趣的數字
題目描述
小q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,相差最小的有多少對呢?相差最大呢?
樣例
輸入例子1:6
4512
453256
輸出例子1:1
2
思路
將陣列進行排序
判斷是否所以數字都相同, 如果是, 則兩個答案都是在n個數字中選擇兩個數字的方案數, 如果不是, 則進行第三步。
(查詢差值最小的方案數)判斷是否存在重複的數字, 如果存在, 那麼最小的數字差就是0, 此時只需要相同數字內部互相組合, 把方案數相加即可。
如果不存在相同的數, 那麼就衝前往後遍歷陣列, 遍歷所有差的情況, 找到最小的那個差值,如果當前的差值小於上乙個差值, 那麼差值變成這個更小的,答案變為1, 如果當前這個和最小差值相等, 則答案數加一
(查詢差值最大的方案數)就是排序後的第乙個數的數量乘以最後乙個數的數量
**
#include
#include
#include
#include
#include
using
namespace std;
const
int n =
100010
;typedef
long
long ll;
int n;
intmain()
sort
(a, a + n)
;int k =m[a[0]
];int e = m[a[n -1]
];if(a[0]
== a[n -1]
)else}if
(ans ==0)
else
if(a[i]
- a[i -1]
== minn)}}
printf
("%d %d\n"
, ans, k * e);}
}return0;
}
騰訊2017暑期實習生程式設計題
刷題 pragma warning disable 4996 遮蔽警告 構造回文 題目描述 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。思路 其實就是,原字串翻轉之後的字串跟原字串的最長公共子串行 那麼利用動態規劃的最長公共...
騰訊2017暑期實習生程式設計題
構造回文串 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。示例1 輸入 a...
騰訊2017暑期實習生程式設計題
程式設計題 構造回文 時間限制 1秒 空間限制 32768k 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個...