算法与数据结构面试分享(十九)判断两个字符串是否模式相似

原创 2018年04月17日 19:55:12

这是今天下午同事出的一道面试题,在线面试的,不过小伙十几分钟里没有搞定,同事是个妹子,很想给提示的,可惜小伙没给机会呀。看题哈。

题目:首先给了一个定义,假设两个字符串的模式一样,我们就认为他们相似。举个例子,字符串1: “abb”,字符串2: “cee“。他们的模式是一样的,我们认为相似,能帮我实现一个算法,可以利用现有的库函数,语言不限,你有什么问题要和我确认的吗?

题目出去了,线上的小伙蒙了。估计没见过这道题,也没见过这样去定义相似。不和大家过多的讲他们具体聊的过程哈,我们还是先一起分析这道题。

1. 相似在这里理解为模式是类似的

2. 可以利用现有的数据结构,可是使用什么呢?我们得先确定问题才能选用恰当的数据结构呀

3. 举例子, “abb”与 “cee”相似很容易理解第一个字符a,c都只出现了一次,第二个字符bb,ee和之前的字符都不同,但都出现了两次。

4. 继续挖掘例子,让我们充分理解问题哈。我们需要确认, “abba”和“ceef”是否相似?这个问题很关键哦,答案是不,大家想一想,如果这种情况也定义为相似该怎么处理哈。

5. 如果字符串有空串,或者长度相等还有可能相似吗?

6. 大小写敏感吗?(当然敏感)

好了,我们在上述问题的基础上,重新定义一下问题,然后寻求解法。其实我们的问题是,有两个非空的字符串,如果他们的模式完全匹配,我们认为相似,否则都不相似。如“abba”与“ceef”不相似,但是“abbaaf”与“ceeccg”是相似的。

大家看图哈:

a

b

b

a

a

f

c

e

e

c

c

g

a - c匹配, b - e 匹配, f - g 匹配。这样是不是就能回答“abba”与“ceef”不相似了哈。

所以我们需要什么数据结构呢?映射对吧?那么,Hash,Dictionary, 甚至二维数组都可以对吧。

那我们一块看下代码:

 public static bool IsSimilar(string str1, string str2)
        {
            if (!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2))
            {
                if (str1.Length == str2.Length)
                {
                    Hashtable hash = new Hashtable();

                    for (int index = 0; index < str1.Length; index++)
                    {
                        if (hash.ContainsKey(str1[index]))
                        {
                            if (str2[index] != (char)hash[str1[index]])
                            {
                                return false;
                            }
                        }
                        else
                        {
                            hash.Add(str1[index], str2[index]);
                        }
                    }

                    return true;
                }
            }
            return false;
        }

一块来测试一下:


好了,大家如果有更好的解法,欢迎提出来我们一起讨论哈。也欢迎大家关注我们的视频教程。

算法与数据结构

算法与数据结构-微软经典面试题

关注我们的公众号,加入QQ群讨论:

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gaoming201314/article/details/79979392

书友会主讲:张永强

  • foxfly
  • foxfly
  • 2004-04-17 10:42:00
  • 630

第4章第1节练习题15 判断两颗二叉树是否相似

试设计判断两颗二叉树是否相似的算法。 所谓二叉树T1和T2相似,指的是T1和T2都是空的二叉树或都只有一个根节点;或T1的左子树和T2的左子树是相似的且T1的右子树和T2的右子树是相似的...
  • u013595419
  • u013595419
  • 2016-08-25 12:05:40
  • 943

搜索引擎技术:标题去重 如何快速判断两个字符串的相似度

判断两个字符串的相似度很容易,关键是如何提高速度。在搜索引擎中,往往有上百万的网页,怎么去重。速度最快。下面用一个hash的办法来快速计算相似度。首先,我们用hash的方法把一个字符串变为一个整数数组...
  • xlvector
  • xlvector
  • 2008-01-15 13:10:00
  • 5245

Python字符串相似度检测

字符串相似度检测。
  • qcyfred
  • qcyfred
  • 2017-07-09 18:31:18
  • 1081

判别给定两棵二叉树是否相似

若已知两棵二叉树B1和B2皆为空,或者皆不空且B1的左、右子树和B2的左、右子树分别相似,则称二叉树B1和B2相似。试编写算法,判别给定两棵二叉树是否相似。...
  • u013228403
  • u013228403
  • 2014-06-22 18:46:36
  • 2262

PHP 比较两个字符串的相似度

  • shaerdong
  • shaerdong
  • 2015-10-23 20:44:38
  • 1850

3个版本的计算字符串的相似度. js C# java

**计算字符串的相似度. javascript版**/** *   * 检查两个字符串的相似度 * 可以用在 DNA分析   拼字检查   语音辨识   抄袭侦测 ...
  • phker
  • phker
  • 2017-11-07 09:53:52
  • 446

计算两个字符串相似度的算法

该方法是使用的Levenshtein算法的一个实现。  简单介绍下Levenshtein Distance(LD):LD 可能衡量两字符串的相似性。它们的距离就是一个字符串转换成那一...
  • fover717
  • fover717
  • 2012-11-02 23:48:13
  • 4310

字符串相似度算法介绍(整理)

最近在做这方面的应用,把我找到的资料贴出来,有需要的人可以参考参考。1.编辑距离(Levenshtein Distance)编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和...
  • dongle2001
  • dongle2001
  • 2007-01-02 12:14:00
  • 24531
收藏助手
不良信息举报
您举报文章:算法与数据结构面试分享(十九)判断两个字符串是否模式相似
举报原因:
原因补充:

(最多只允许输入30个字)