maomaocat

导航

上地某公司笔试题

      上地某公司笔试题。求两个字符串的最大子串。eg;s1="I love you ";s2="you are foolish boy";最大子串为 "you ";可用你熟悉的语言编写 。
       因为到这个公司已经晚了。发挥得不好。我不知道他要考哪方面。是考面向对象的设计呢还是考算法。我当时是按面向对象的设计作的。因为毕竟是考 高级程序员。(若是算法:实际应是数据结构,即字串的模式匹配算法,最简单朴素算法,或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;
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());

        }
    }
}

posted on 2007-05-21 08:09  maomaocat  阅读(312)  评论(1)    收藏  举报