上地某公司笔试题
上地某公司笔试题。求两个字符串的最大子串。eg;s1="I love you ";s2="you are foolish boy";最大子串为 "you ";可用你熟悉的语言编写 。
因为到这个公司已经晚了。发挥得不好。我不知道他要考哪方面。是考面向对象的设计呢还是考算法。我当时是按面向对象的设计作的。因为毕竟是考 高级程序员。(若是算法:实际应是数据结构,即字串的模式匹配算法,最简单朴素算法,或KMP算法。)但作到一半,要求简单写一下,只好把主要的方法写出来。类的写法是按照模板方法模式写的。实际若是简单写,只写一个静态类一个静态方法就完了。(类似 System.Math类)。
个人感觉我不是适合笔试,或面试。但有些问题面试的人也没有问,诸如类的设计,为什么这么设计等。
总体感觉出的题,面试的问题能体现出人的一定水平。毕竟是国内一流软件企业。但这道题应是适合刚毕业的,因为面向对象在这里用不到用场(是写简单的静态类呢,还是模板方法??),而刚毕业的人对算法,C++都有一定基础。个人认为面试的人并没有认真作准备。
下面英语基本就没戏了,虽然过CET4,但那是十多年的事,能听懂,看懂,说不行。我又不去外包企业!英语口语,真的无话可说。但我的态度也不好,毕竟是被别人考,而且英语确实不怎样。
下面的代码:是我回来后写的:
因为到这个公司已经晚了。发挥得不好。我不知道他要考哪方面。是考面向对象的设计呢还是考算法。我当时是按面向对象的设计作的。因为毕竟是考 高级程序员。(若是算法:实际应是数据结构,即字串的模式匹配算法,最简单朴素算法,或KMP算法。)但作到一半,要求简单写一下,只好把主要的方法写出来。类的写法是按照模板方法模式写的。实际若是简单写,只写一个静态类一个静态方法就完了。(类似 System.Math类)。
个人感觉我不是适合笔试,或面试。但有些问题面试的人也没有问,诸如类的设计,为什么这么设计等。
总体感觉出的题,面试的问题能体现出人的一定水平。毕竟是国内一流软件企业。但这道题应是适合刚毕业的,因为面向对象在这里用不到用场(是写简单的静态类呢,还是模板方法??),而刚毕业的人对算法,C++都有一定基础。个人认为面试的人并没有认真作准备。
下面英语基本就没戏了,虽然过CET4,但那是十多年的事,能听懂,看懂,说不行。我又不去外包企业!英语口语,真的无话可说。但我的态度也不好,毕竟是被别人考,而且英语确实不怎样。
下面的代码:是我回来后写的:
using System;
using System.Collections.Generic;
using System.Text;
namespace Chain
{
/// <summary>
/// 上地某公司笔试题。求两个字符串的最大子串。eg;s1="I love you ";s2="you are foolish boy";
/// 最大 子串为 "you ";可用你熟悉的语言编写 。
/// </summary>
public abstract class Chain
{
private string m_strFirst;
private string m_strSecond;
/// <summary>
/// 确定把长度大的设为m_strFirst.
/// </summary>
/// <param name="strOne"></param>
/// <param name="strTwo"></param>
public Chain(string strOne,string strTwo)
{
if (strOne.Length > strTwo.Length)
{
m_strFirst = strOne;
m_strSecond = strTwo;
}
else
{
m_strFirst = strTwo;
m_strSecond = strOne;
}
}
#region attr
public string StrFirst
{
get { return m_strFirst; }
}
public string StrSecond
{
get { return m_strSecond; }
}
#endregion
//应用模板方法模式。
public abstract string CommonChain();
}
/// <summary>
/// 最简单的朴素的模式算法。
/// </summary>
public class SimpleChain : Chain
{
public SimpleChain(string strOne, string strTwo)
: base(strOne, strTwo)
{
}
public override string CommonChain()
{
//throw new Exception("The method or operation is not implemented.");
for (int j = base.StrSecond.Length; j >= 0; j--)
{
int chainLength = j;
for (int k = 0; k + chainLength < StrSecond.Length; k++)
{
if(base.StrFirst.Contains(base.StrSecond.Substring(k,chainLength)))
return base.StrSecond.Substring(k,chainLength);
}
}
return string.Empty;
}
}
class Program
{
static void Main(string[] args)
{
string s1 = "pan is stupid,the boss is ";
string s2 = "system designed by huang ,he is stupid too";
SimpleChain mySimpleChain = new SimpleChain(s1, s2);
System.Console.WriteLine(mySimpleChain.CommonChain());
}
}
}
下面是改进的代码:(主要目的:减少耦合度,调用者使用方便,无需了解更多)using System.Collections.Generic;
using System.Text;
namespace Chain
{
/// <summary>
/// 上地某公司笔试题。求两个字符串的最大子串。eg;s1="I love you ";s2="you are foolish boy";
/// 最大 子串为 "you ";可用你熟悉的语言编写 。
/// </summary>
public abstract class Chain
{
private string m_strFirst;
private string m_strSecond;
/// <summary>
/// 确定把长度大的设为m_strFirst.
/// </summary>
/// <param name="strOne"></param>
/// <param name="strTwo"></param>
public Chain(string strOne,string strTwo)
{
if (strOne.Length > strTwo.Length)
{
m_strFirst = strOne;
m_strSecond = strTwo;
}
else
{
m_strFirst = strTwo;
m_strSecond = strOne;
}
}
#region attr
public string StrFirst
{
get { return m_strFirst; }
}
public string StrSecond
{
get { return m_strSecond; }
}
#endregion
//应用模板方法模式。
public abstract string CommonChain();
}
/// <summary>
/// 最简单的朴素的模式算法。
/// </summary>
public class SimpleChain : Chain
{
public SimpleChain(string strOne, string strTwo)
: base(strOne, strTwo)
{
}
public override string CommonChain()
{
//throw new Exception("The method or operation is not implemented.");
for (int j = base.StrSecond.Length; j >= 0; j--)
{
int chainLength = j;
for (int k = 0; k + chainLength < StrSecond.Length; k++)
{
if(base.StrFirst.Contains(base.StrSecond.Substring(k,chainLength)))
return base.StrSecond.Substring(k,chainLength);
}
}
return string.Empty;
}
}
class Program
{
static void Main(string[] args)
{
string s1 = "pan is stupid,the boss is ";
string s2 = "system designed by huang ,he is stupid too";
SimpleChain mySimpleChain = new SimpleChain(s1, s2);
System.Console.WriteLine(mySimpleChain.CommonChain());
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ChainTwo
{
/// <summary>
/// 上地某公司笔试题。求两个字符串的最大子串。eg;s1="I love you ";s2="you are foolish boy";
/// 最大 子串为 "you ";可用你熟悉的语言编写 。
/// </summary>
public class ChainInfo
{
private string m_strFirst=string.Empty;
private string m_strSecond=string.Empty ;
/// <summary>
/// 默认构造函数
/// </summary>
public ChainInfo()
{
}
/// <summary>
/// 确定把长度大的设为m_strFirst.
/// </summary>
/// <param name="strOne"></param>
/// <param name="strTwo"></param>
public ChainInfo(string strOne, string strTwo)
{
if (strOne.Length > strTwo.Length)
{
m_strFirst = strOne;
m_strSecond = strTwo;
}
else
{
m_strFirst = strTwo;
m_strSecond = strOne;
}
}
#region attr
public string StrFirst
{
get { return m_strFirst; }
set
{
m_strFirst = value;
if(m_strFirst.Length <m_strSecond.Length )
{
string temp=m_strSecond ;
m_strSecond =m_strFirst;
m_strFirst =temp;
}
}
}
public string StrSecond
{
get { return m_strSecond; }
set
{
m_strSecond =value ;
if (m_strSecond.Length > m_strFirst.Length)
{
string temp = m_strSecond;
m_strSecond = m_strFirst;
m_strFirst = temp;
}
}
}
#endregion
}
public abstract class Chain
{
private ChainInfo m_ChainInfo;
/// <summary>
/// 构造函数
/// </summary>
public Chain()
{
m_ChainInfo = new ChainInfo();
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="aChainInfo"></param>
public Chain(ChainInfo aChainInfo)
{
m_ChainInfo = aChainInfo;
}
public Chain(string strOne, string strTwo)
{
m_ChainInfo = new ChainInfo(strOne,strTwo );
}
#region attr
public ChainInfo ChainInfo
{
get { return m_ChainInfo; }
set { m_ChainInfo = value; }
}
#endregion
//应用模板方法模式。
public abstract string CommonChain();
}
/// <summary>
/// 最简单的朴素的模式算法。
/// </summary>
public class SimpleChain : Chain
{
public SimpleChain():base()
{
}
public SimpleChain(string strOne, string strTwo)
: base(strOne, strTwo)
{
}
public override string CommonChain()
{
//throw new Exception("The method or operation is not implemented.");
for (int j = this.ChainInfo.StrSecond.Length; j >= 0; j--)
{
int chainLength = j;
for (int k = 0; k + chainLength < this.ChainInfo.StrSecond.Length; k++)
{
if (ChainInfo.StrFirst.Contains(ChainInfo.StrSecond.Substring(k, chainLength)))
return ChainInfo.StrSecond.Substring(k, chainLength);
}
}
return string.Empty;
}
}
class Program
{
static void Main(string[] args)
{
SimpleChain aSimpleChain=new SimpleChain("pan is stupid,the boss is","system designed by huang ,he is stupid too");
System.Console.WriteLine(aSimpleChain.CommonChain());
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ChainTwo
{
/// <summary>
/// 上地某公司笔试题。求两个字符串的最大子串。eg;s1="I love you ";s2="you are foolish boy";
/// 最大 子串为 "you ";可用你熟悉的语言编写 。
/// </summary>
public class ChainInfo
{
private string m_strFirst=string.Empty;
private string m_strSecond=string.Empty ;
/// <summary>
/// 默认构造函数
/// </summary>
public ChainInfo()
{
}
/// <summary>
/// 确定把长度大的设为m_strFirst.
/// </summary>
/// <param name="strOne"></param>
/// <param name="strTwo"></param>
public ChainInfo(string strOne, string strTwo)
{
if (strOne.Length > strTwo.Length)
{
m_strFirst = strOne;
m_strSecond = strTwo;
}
else
{
m_strFirst = strTwo;
m_strSecond = strOne;
}
}
#region attr
public string StrFirst
{
get { return m_strFirst; }
set
{
m_strFirst = value;
if(m_strFirst.Length <m_strSecond.Length )
{
string temp=m_strSecond ;
m_strSecond =m_strFirst;
m_strFirst =temp;
}
}
}
public string StrSecond
{
get { return m_strSecond; }
set
{
m_strSecond =value ;
if (m_strSecond.Length > m_strFirst.Length)
{
string temp = m_strSecond;
m_strSecond = m_strFirst;
m_strFirst = temp;
}
}
}
#endregion
}
public abstract class Chain
{
private ChainInfo m_ChainInfo;
/// <summary>
/// 构造函数
/// </summary>
public Chain()
{
m_ChainInfo = new ChainInfo();
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="aChainInfo"></param>
public Chain(ChainInfo aChainInfo)
{
m_ChainInfo = aChainInfo;
}
public Chain(string strOne, string strTwo)
{
m_ChainInfo = new ChainInfo(strOne,strTwo );
}
#region attr
public ChainInfo ChainInfo
{
get { return m_ChainInfo; }
set { m_ChainInfo = value; }
}
#endregion
//应用模板方法模式。
public abstract string CommonChain();
}
/// <summary>
/// 最简单的朴素的模式算法。
/// </summary>
public class SimpleChain : Chain
{
public SimpleChain():base()
{
}
public SimpleChain(string strOne, string strTwo)
: base(strOne, strTwo)
{
}
public override string CommonChain()
{
//throw new Exception("The method or operation is not implemented.");
for (int j = this.ChainInfo.StrSecond.Length; j >= 0; j--)
{
int chainLength = j;
for (int k = 0; k + chainLength < this.ChainInfo.StrSecond.Length; k++)
{
if (ChainInfo.StrFirst.Contains(ChainInfo.StrSecond.Substring(k, chainLength)))
return ChainInfo.StrSecond.Substring(k, chainLength);
}
}
return string.Empty;
}
}
class Program
{
static void Main(string[] args)
{
SimpleChain aSimpleChain=new SimpleChain("pan is stupid,the boss is","system designed by huang ,he is stupid too");
System.Console.WriteLine(aSimpleChain.CommonChain());
}
}
}
浙公网安备 33010602011771号