上周五的MS一道面试题

news/2025/2/27 10:24:25

题目要求:
写一个返回两个任意字串中最大公共串的函数,即abcdef 和 qcfbcc 返回值为bc语言不限

我的思路:
1.确定一个串为长串,另一个串为短串,在长串中找短串(长串中最长的公串可能性就是短串本身)
2.顺序确定短串中的每个字符是否在长串中出现(先做一个预定位)
3.如满足条件2,即短串中某个字符在长串中出现,在长串中试图找从这个字符起到短串末尾止的整个串
4.如果不满足条件3,短串末尾递减1个字符,直到找到此次字符出现的最大长度(至少是一个字符)
5.把此次找到的字符长度,与临时变量比较,如果此次长度大于历史长度,重赋值返回值
6.重复2-5,直到短串末尾

我的实现:
C#版
public static string GetPubMaxString(string Value1,string Value2)
{
 string result=null,stmp;
 int maxLen=0;
 if (Value2.Length>Value1.Length)//确保Value1是长串
 {
  stmp=Value1;
  Value1=Value2;
  Value2=stmp;
 }
 for (int i=0;i
 {
  if (Value1.IndexOf(Value2[i])>-1)//长串中依次判断短串的每个字符是否出现
  {
   stmp=Value2.Substring(i);//截取短串中出现字符到末尾存入变量
   for (int ii=stmp.Length;ii>0;ii--)
   {
    if (Value1.IndexOf(stmp.Substring(0,ii))>-1)//长串中依次判断短串变量的左取子串是否出现
     if (ii>maxLen) //如果出现并且此串长度大于上串的长度
     {
      result=stmp.Substring(0,ii);
      maxLen=ii;
     }
   }
  }
 }
 return result;
}

 

当时在半年不用笔,旁边很吵(好像另一个面试在问Struts的问题)的情况下,十几分钟才想完写完,回家上机试验居然倒是一点错漏也没有,看来还没有老的不中用啊;当然,我相信还有更好的算法实现,拿出这个题目来和大家交流交流,希望能看到大家有启发性的思路和算法。

在CSDN上看到了soholi(天涯孤棹) 网友实现上更简洁的算法:
public static string GetLargePublicString(string A,string B)
{
 string shortString = A.Length > B.Length ? B : A;//取较短者;
 string longString = A.Length > B.Length ? A : B;//取较长者;
 for (int i = shortString.Length; i > 0; i--)//长度递减
 {
  for (int j = 0; j <= shortString.Length - i; j++)//位置递增
  {
   if (longString.IndexOf(shortString.Substring(j,i)) != -1)
   {
    return shortString.Substring(j, i);
   }
  }
 }
 return string.Empty;
}
真是可以算是不能再优雅简洁的实现了,唯一的缺点就是,这个算法的效率比我的那个实现稍微慢了一些,尤其是在两个文本串都比较长的情况之下,因为两个实现最核心的区别就在于,我那个GetPubMaxString是先定位确实存在的一个字符后,才开始找这个一定存在,但长度未知的公共串,而网友soholi(天涯孤棹) 的GetLargePublicString则是在长串遍历整个短串的组合,这两者比较起来,也算是一个时间有优势,一个空间有优势的差别吧,不知大家还有没有更让人有启发的实现

另外,经过了SM的面试笔试,MS的面试面试,终于获得了一个SM发饷,MS扛枪的影子战士的职位,人家已经在催我开工了,可是我还没有想好要不要去,真烦啊!

 





http://www.niftyadmin.cn/n/3656706.html

相关文章

基于qemu-riscv从0开始构建嵌入式linux系统ch23. linux FB应用——Qt库移植

基于qemu-riscv从0开始构建嵌入式linux系统ch23. linux FB应用——Qt库移植 Qt 应该是做嵌入式开发和做linux应用开发的朋友都很熟悉的东西&#xff0c;Qt是一套C的开发库&#xff0c;主要被应用与GUI开发中&#xff0c;既然我们之前已经成功启用了qemu虚拟的显示设备驱动&am…

diamondlost-别了,我心中的Borland!

技术和产品行不行,要看开发者是在流失还是激增,关于Delphi,不敢说拥护者是在增加,而是像我这样一个个伤心地离去,记得当年用Delphi写就"代码千行几,又思量"时的激情,然后那种感觉已经与我渐行渐远,是我的朝秦暮楚贪新厌旧?还是Delphi的日薄西山豪情气尽,这不是我应该…

基于qemu-riscv从0开始构建嵌入式linux系统ch24. qemu网卡/linux内核网络配置

基于qemu-riscv从0开始构建嵌入式linux系统ch24. qemu网卡/linux内核网络配置 virtio-net-device 本节我们给系统添加网络相关的配置&#xff0c;和之前一样virtio-mmio还提供了网络设备的注册&#xff0c;这里我们选择添加qemu支持的最简单的user模式网络&#xff0c;其他博…

Java动态代理的实现

概念 代理模式 代理模式是常用的java设计模式&#xff0c;他的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一个…

冲突激荡――现代项目管理与中国信息化现状碰撞思考

李国平 九城数码项目管理是为达成某项工作目标&#xff0c;运用一系列的知识、工具与技能&#xff0c;对整个项目生命期的启动、计划、执行、控制和结束五个阶段进行规划与管控的过程。以1987年由PMI提出的PMBOK(A Guide To The Project Management Body Of Knowledge)为代表的…

基于qemu-riscv从0开始构建嵌入式linux系统ch25. sshd服务配置

基于qemu-riscv从0开始构建嵌入式linux系统ch25. sshd服务配置 openssh 很多在网络环境使用的嵌入式开发板后期产品开发稳定后一般都不会在使用串口登录终端&#xff0c;而是使用ssh连接&#xff0c;这就需要系统启动时添加启动sshd服务&#xff0c;在嵌入式linux上使用较多的…

遥祝台湾友人黄先生

黄袍仙客东南来&#xff0c;宋宫佳丽伴君形。才学经纶心仁益&#xff0c;笑靥如花美若琦。七载花开修成果&#xff0c;百年好合胜瑶台。三秋萍水沐钟鼓&#xff0c;他朝聚首勿忘怀。---遥祝 台湾友人黄仁益先生(Chivas) 宋若琦女士(Iris) 于…

kgdb调试linux内核以及驱动模块

kgdb调试linux内核以及驱动模块 本文将简要描述如何配置kgdb进行内核以及驱动模块调试&#xff0c;以嵌入式开发为例&#xff0c;但同样对于其他有需要调试kernel有一定的参考价值。本文实验环境为qemu搭建的riscv64模拟器环境&#xff0c;笔者之前有系列博客详细描述了环境搭…