雅虎公司C#笔试题(后半部份才是)

“雅虎公司C#笔试题(后半部份才是)”是一道常见于程序员面试和笔试的题目。下面就从如何解题的角度,为大家讲解完整攻略。

题目描述

题目大意是给出两个字符串,求它们在其中一个字符串中的最长公共子串。

具体需要完成的是,实现一个方法 string Find(string str1, string str2, string source),其中:

  1. 参数 str1 和 str2 分别表示两个字符串,字符串长度小于 100。
  2. 参数 source 表示包括 str1 和 str2 的字符串,字符串长度小于 1000。
  3. 返回值为 str1 和 str2 在 source 中的最长公共子串,如果不存在,返回空字符串。

解题思路

本题要求的是两个字符串在另一个字符串中的最长公共子串,因此我们可以采用一种类似于动态规划的思路来解决。

首先定义一个二维数组 dp,其中 dp[i,j] 表示以 source[i-1]source[j-1] 结尾的两个子串的最长公共子串长度。这里用 i-1j-1 是为了避免数组越界问题。

然后我们重复执行以下步骤,直到所有的 dp 值都求出来:

  1. 如果 source[i-1] == source[j-1],那么 dp[i,j] 就等于 dp[i-1,j-1] + 1
  2. 否则,dp[i,j] 就等于 0。

我们再定义两个变量 maxLenendIndex,分别表示最长公共子串的长度和结束位置。我们在更新每个 dp[i,j] 的时候,如果它的值比 maxLen 还大,就更新 maxLenendIndex

最后,我们从 endIndex-maxLen 的位置开始,取出长度为 maxLen 的子串,就是我们要求的最长公共子串。

代码实现

下面是 C# 语言的完整代码实现。

public string Find(string str1, string str2, string source)
{
    if (string.IsNullOrEmpty(str1) || string.IsNullOrEmpty(str2) || string.IsNullOrEmpty(source))
    {
        return string.Empty;
    }

    int len1 = str1.Length;
    int len2 = str2.Length;
    int len = source.Length;
    int maxLen = 0;
    int endIndex = 0;

    int[,] dp = new int[len + 1, len + 1];

    for (int i = 1; i <= len; i++)
    {
        for (int j = 1; j <= len; j++)
        {
            if (source[i - 1] == str1[j - 1])
            {
                dp[i, j] = dp[i - 1, j - 1] + 1;
                if (dp[i, j] > maxLen)
                {
                    maxLen = dp[i, j];
                    endIndex = i;
                }
            }
        }
    }

    if (maxLen == 0)
    {
        return string.Empty;
    }

    return source.Substring(endIndex - maxLen, maxLen);
}

示例说明

为了更好地理解上述代码,我们来看两个示例。

示例一

假设给定的输入是:

str1: "hello"
str2: "world"
source: "helloworld"

执行 Find 方法后,我们得到的输出应该是 "world"

这是因为 "world" 是字符串 "hello""world" 在字符串 "helloworld" 中的最长公共子串。

示例二

假设给定的输入是:

str1: "abcd"
str2: "efgh"
source: "ijkl"

执行 Find 方法后,我们得到的输出应该是空字符串 ""

这是因为字符串 "abcd""efgh" 在字符串 "ijkl" 中不存在公共子串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:雅虎公司C#笔试题(后半部份才是) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言WinSock学习笔记

    下面我来详细讲解一下《C语言WinSock学习笔记》的完整攻略。 一、WinSock是什么 WinSock (Windows Sockets) 是一种技术,允许应用程序通过 TCP/IP 协议来进行网络通信,是 Windows 操作系统自带的一个 API。WinSock 可以使用基于 TCP 或者 UDP 协议的 Socket 通信方式来实现网络应用。 二、…

    C 2023年5月22日
    00
  • C语言中的算法

    C语言中的算法使用攻略 什么是算法? 算法是指完成特定任务的一系列步骤。在计算机编程中,算法是指一系列解决问题的方法和技巧。 算法在C语言中的应用 C语言中的很多常用函数或者库都依赖算法。在具体实现时,需要编写算法的代码来解决相关的问题。C语言中使用算法的主要步骤如下: 1. 定义输入和输出 对于算法来说,需要先定义输入和输出,在C语言中可以使用函数的参数和…

    C 2023年5月9日
    00
  • C语言实现学生信息管理系统开发

    C语言实现学生信息管理系统开发攻略 简介 学生信息管理系统是企事业单位、政府机关和社会组织等管理组织必不可少的一项基础工作,管理学生信息可以提高工作效率,有效保证了各项工作的有序开展。本文将以C语言为开发语言,实现学生信息管理系统的开发。 开发工具 开发学生信息管理系统的首选是C语言,然后我们需要一款好用的IDE进行编写,比如Visual Studio Co…

    C 2023年5月23日
    00
  • Asp.net开发常用的51个非常实用的代码

    “Asp.net开发常用的51个非常实用的代码”是一篇介绍Asp.net开发中常用代码的文章,其中包括了一些在实际开发中非常有用的代码片段。下面我将为大家详细讲解完整攻略: 1. 文章概述 本文将介绍Asp.net开发常用的51个实用的代码,包括以下主题:- 数据操作- 字符串操作- 文件操作- XML操作- JSON操作 每个主题下都有几个非常实用的代码片…

    C 2023年5月23日
    00
  • C++深入探究哈希表如何封装出unordered_set和unordered_map

    以下是关于“C++深入探究哈希表如何封装出unordered_set和unordered_map”的完整攻略: 前言 哈希表是一种非常常用的数据结构,它的原理是利用哈希函数将元素映射到数组中,实现快速的查找、插入、删除等操作。在C++标准库中,也提供了一些封装好的哈希表容器,如unordered_set和unordered_map。 本文将对C++中哈希表的…

    C 2023年5月23日
    00
  • Go语言利用Unmarshal解析json字符串的实现

    下面我来详细讲解“Go语言利用Unmarshal解析JSON字符串的实现”。 什么是Unmarshal Unmarshal(解封)是将数据从某种格式转换为可操作的结构体等数据类型的过程。对于Golang来说,Unmarshal通常用于将JSON格式的数据解析为Golang的数据结构,以便于进行数据的操作和处理。 Golang利用Unmarshal解析JSON…

    C 2023年5月23日
    00
  • C语言中注释与注意事项的深入讲解

    当我们编写C语言程序时,注释是很重要的组成部分。它可以使我们更好地理解和维护代码。本文将深入讲解C语言中的注释以及使用注释时需要注意的事项。 注释的基本使用方法 在C语言程序中,注释分为两种类型,行注释和块注释。 行注释 行注释是在一行中注释掉整个行的过程。我们可以在代码行的前面加上//来实现行注释。行注释只有一个行结束符能够终止注释。以下是一个例子: in…

    C 2023年5月23日
    00
  • 开机显示文件BOOT.INI非法正从C:\windows\启动怎么办?

    “开机显示文件BOOT.INI非法正从C:\windows\启动怎么办?”的完整攻略 症状描述 当开机时,可能会遇到以下错误信息: 文件BOOT.INI非法 正从C:\windows\启动 该错误表明系统在启动时无法找到或读取BOOT.INI文件,因此无法引导操作系统。 解决步骤 步骤一:准备Windows系统安装光盘或U盘 由于Windows安装光盘或U盘…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部