码迷,mamicode.com
首页 > 其他好文 > 详细

腾讯2017暑期实习生编程题

时间:2016-08-04 10:21:12      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

[编程题] 构造回文
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。

输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.



输出描述:

对于每组数据,输出一个整数,代表最少需要删除的字符个数。


输入例子:
abcda
google

输出例子:
2
2
实现思想:

首先保存s字符串,之后再保存其rs相反的字符串;

对其求最大子序列和,则结果就是回文串。

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. using namespace std;
  6. int getCommonSubsequenceLength(string s1, string s2){
  7. int len1 = s1.size();
  8. int len2 = s2.size();
  9. vector<vector<int>> vec(len1+1, vector<int>(len2+1, 0));
  10. for(int i = 1; i <= len1; ++i){
  11. for(int j = 1; j <= len2; ++j){
  12. if(s1[i-1] == s2[j-1]){
  13. vec[i][j] = vec[i-1][j-1]+1;
  14. }
  15. else{
  16. vec[i][j] = max(vec[i][j-1], vec[i-1][j]);
  17. }
  18. }
  19. }
  20. return vec[len1][len2];
  21. }
  22. int main(){
  23. string s;
  24. while(cin >> s){
  25. string s1 = s;
  26. reverse(s1.begin(), s1.end());
  27. cout << s.size() - getCommonSubsequenceLength(s, s1) << endl;
  28. }
  29. }
[编程题] 算法基础-字符移位
小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
你能帮帮小Q吗?


输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.



输出描述:

对于每组数据,输出移位后的字符串。


输入例子:
AkleBiCeilD

输出例子:
kleieilABCD

  1. #include <iostream>
  2. #include <string>
  3. #include <cctype>
  4. using namespace std;
  5. int main(){
  6. string s;
  7. while(cin >> s){
  8. int len = s.size();
  9. for(int i = len-1; i >= 0; --i){
  10. if(isupper(s[i])){
  11. for(int j = i; j <= len-2; ++j){
  12. if(isupper(s[j+1])){
  13. break;
  14. }
  15. else{
  16. int temp = s[j];
  17. s[j] = s[j+1];
  18. s[j+1] = temp;
  19. }
  20. }
  21. }
  22. }
  23. cout << s << endl;
  24. }
  25. return 0;
  26. }

[编程题] 有趣的数字
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差的绝对值最小的有多少对呢?差的绝对值最大的呢?


输入描述:

输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2...an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.



输出描述:

对于每组数据,输出两个数,第一个数表示差的绝对值最小的对数,第二个数表示差的绝对值最大的对数。


输入例子:
6
45 12 45 32 5 6

输出例子:
1 2


  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. int main(){
  6. int n;
  7. while(cin >> n){
  8. vector<int> vec(n,0);
  9. for(int i = 0; i < n; ++i){
  10. cin >> vec[i];
  11. }
  12. if(n == 0){
  13. cout << 0 << " " << 0 << endl;
  14. continue;
  15. }
  16. sort(vec.begin(), vec.end());
  17. if(vec[0] == vec[n-1]){
  18. int num = n*(n-1)/2;
  19. cout << num << " " << num << endl;
  20. continue;
  21. }
  22. int minNum = count(vec.begin(), vec.end(), vec[0]);
  23. int maxNum = count(vec.begin(), vec.end(), vec[n-1]);
  24. int maxCount = minNum * maxNum;
  25. int minError = vec[1] - vec[0];
  26. for(int i = 0; i < n-1; ++i){
  27. if(vec[i+1]-vec[i] < minError){
  28. minError = vec[i+1]-vec[i];
  29. }
  30. }
  31. int minCount = 0;
  32. for(int i = 0; i < n; ++i){
  33. for(int j = i+1; j < n; ++j){
  34. if(vec[j]-vec[i] == minError){
  35. minCount++;
  36. }
  37. }
  38. }
  39. cout << minCount << " " << maxCount << endl;
  40. }
  41. return 0;
  42. }





腾讯2017暑期实习生编程题

标签:

原文地址:http://www.cnblogs.com/pukaifei/p/5735533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!