程序员面试修炼01 | 腾讯2017笔试题

Posted 19应届生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面试修炼01 | 腾讯2017笔试题相关的知识,希望对你有一定的参考价值。

靠代码行数来衡量开发进度,就像是凭重量来衡量飞机制造的进度。——比尔·盖茨

名词解释

程序员面试修炼01 | 腾讯2017笔试题

面试真题

题目(2017腾讯笔试题):

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

 

输出需要删除的字符个数


输入描述:

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

输出描述:

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

输入例子:

abcda 
google

输出例子:


2

解题思路

本题可以转换为求该字符串与其反序字符串的最长公共子序列问题,即利用LCS算法求解。

例如:abcda的反序字符串为adcba,最长公共子序列为aba,其公共子序列必为回文序列,然后可求出最少删除多少个字节使其成为回文字符串。

本题采用动态规划来求解问题,下面看看模拟的推导过程。

状态转移方程为:(令A为输入字符串,B为其反序字符串,num[][]记录当前最长公共子序列的长度) 

if (A[i]==B[j]) 

num[i][j]=num[i−1][j−1]+1 i f   ( A [ i ] == B [ j ] )   n u m [ i ] [ j ] = n u m [ i 1 ] [ j 1 ] + 1


else 

num[i][j]=max(num[i1][j], num[i][j-1])



0 a b c d a
0 0 0 0 0 0 0
a 0 1 1 1 1 2
d 0 1 1 1 2 2
c 0 1 1 2 2 2
b 0 1 2 2 2 2
a 0 1 2 2 2 3

下面来看解题代码(如果代码页面超出可以左右上下移动):

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <string>

using namespace std;
int main(){    
   string s;    
   while(cin>>s){        
       int len = s.length();        
       int maxlen = 0;        
       vector<vector<int> > Vec;      
        for(int i = 0 ; i < len+1 ; i++){          
           vector<int> temp(len+1,0);            Vec.push_back(temp);        }        
       for(int i = 1; i< len+1 ; i++){            
            for(int j = 1 ; j < len+1;j++){                
                if(s[i-1]==s[len-j]){                    Vec[i][j] = Vec[i-1][j-1]+1;                }                
                else {                    Vec[i][j] = max(Vec[i-1][j],Vec[i][j-1]);                }            }        }        
        cout<<len-Vec[len][len]<<endl;    } }

程序员面试修炼01 | 腾讯2017笔试题

技术知识点

网络七层协议


OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。


应用层


与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。


表示层


这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。


会话层


它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。


传输层


这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。


网络层



数据链路层


它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。


物理层


OSI的物理层规范是有关传输介质的特这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。




程序员面试修炼01 | 腾讯2017笔试题


刚刚考完腾讯笔试的不要灰心,全力刷题,备战下一次的笔试以及面试。





以上是关于程序员面试修炼01 | 腾讯2017笔试题的主要内容,如果未能解决你的问题,请参考以下文章

笔试题81. 腾讯2017暑期实习生笔试题

2017腾讯实习笔试题

2021阿里+头条+腾讯等大厂Java笔试题分享

各大公司笔试题及答案

2021年阿里腾讯字节等大厂技术面试题汇总,西安富士通Java笔试题

2017腾讯秋招笔试题之编码