闲着无聊在微信上看到一个皮裤子面试算法的问题,面试者Paul后来用皮裤子的算法赢得了Google的职位。题目如下:
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法是讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOM
答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。
皮裤子给出的算法是把小字符串的字符用质数编码相乘。然后遍历大字符串,如果积能被任何字符整除,没有特殊字符。
看到这里,貌似很精妙,但是仔细推敲有漏洞:
1. 乘除法cpu周期多
2. 如果有26个英文字母,那么需要26个质数,2-101, 用excel整数以后是38位整数。。。这怎么表示和计算?
看完之后真的怀疑人生,难道google这么好混?26个字符,用int当bitmap就好了
忍不住骑墙去看
原文,果然有50个人在评论中质疑,也有人提到bitsmap算法。
但是其中一个中国人的回复让人很钦佩:Xiaonan Ji说这是讲面试经验的最好文章,抛开算法,怎样为心仪的公司面试先去面试别的公司,面试中的心里技巧。。。
解决问题容易,包容别人难
http://blog.sina.com.cn/s/blog_620ccfbf0100r69s.html
btw, 知乎上看了一下算法相关讨论,居然跟奥数一样变成刷题,有专门的线上刷题,高效啊。这样进大公司又能说明什么呢?记得以前scjp考高分的一个网友。。。不过看看一些题目的做法的确很巧妙,欲罢不能,有些题目真的用到奥数知识,比如回文数必须是11的倍数等。。。
出题的人也辛苦,要不断出网上没有的题目。看样以后面试还是出些现实问题看怎样一步一步分析吧。记得以前问无人机遥控的方案就很有意思。
分享到:
相关推荐
在计算机科学领域,字符串相似度比较算法是一种用于评估两个字符串之间相似程度的技术。这些算法广泛应用于文本处理、信息检索、生物信息学等多个领域。当我们要判断两个字符串是否含有相同或相近的信息时,这类算法...
Levenshtein算法,也称为编辑距离算法,就是用于衡量两个字符串之间差异程度的一种方法。本文将深入探讨如何使用Delphi编程语言来实现这一算法,并分析其原理和应用。 Levenshtein算法的核心思想是通过计算将一个...
本文将深入探讨如何在C#中实现文本对比算法,以比较两个字符串的不同,并了解如何利用这些差异进行实际应用。 首先,文本对比的基本目标是识别两个文本之间的异同,这在版本控制、文档编辑、代码审查等场景中非常...
7. **连接字符串**:连接两个链式字符串需要创建一个新的尾节点,该节点的指针指向第二个字符串的首节点。 8. **打印字符串**:打印链式字符串只需要顺序遍历链表并输出每个节点的字符。 在提供的“LiString”文件...
这个算法主要用于衡量两个字符串之间的差异,即需要进行多少次单字符操作(插入、删除或替换)才能将一个字符串转换为另一个字符串。在文本处理、信息检索、生物信息学等领域有着广泛的应用。 字符串相似度是评估两...
字符串相似度算法是一种衡量两个字符串之间相似度的方法,广泛应用于自然语言处理、数据挖掘、机器学习等领域。在本文中,我们将讨论一种常用的字符串相似度算法:Levenshtein Distance。 什么是Levenshtein ...
首先,字符串循环左移问题是指将一个字符串S的前k个字符移动到字符串的尾部,例如字符串“abcdef”前两个字符“ab”移动到尾部后得到新字符串“cdefab”。这个问题有多种解决方法,其中一种是暴力移位法,即每次循环...
- 如果找不到完全匹配的子串,取字典中最长的前缀子串,然后将当前字符添加到这个前缀后面,形成新的字符串,并将其添加到字典中,生成一个新的编码。 - 使用找到的编码和剩余未处理的二进制字符串,构造出新的...
用途:可用于论文抄袭检测、DNA等。...算法实现思路:通过对一个字符串插入、删除、替换转变成另一个字符串所需要的步骤称为距离,计算两个字符串之间的距离,从而可以得到两个字符串之间的相似度。
在IT领域,尤其是在编程与数据处理中,统计字符串中不同字符出现的频度是一个常见的需求。这不仅有助于文本分析,还能应用于密码学、自然语言处理等多个方面。下面,我们将深入探讨这一主题,包括其实现原理、算法...
编辑距离,又称Levenshtein距离,是一种衡量两个字符串相似度的方法。它是通过计算将一个字符串转换成另一个字符串所需的最少单字符编辑(插入、删除或替换)次数来定义的。在文本处理、生物信息学、搜索建议等领域...
`strcmp`函数是C语言标准库中的一个函数,用于比较两个字符串的大小。在这个问题中,我们需要设计一个名为`strcmp(s, t)`的算法,它能实现与C语言标准库中的`strcmp`相同的功能。下面将详细讨论字符串比较的基本概念...
2. **匹配过程**:逐个比较两个字符串的字符,如果匹配成功,则移动两个指针到下一个位置;如果不匹配,根据通配符规则进行调整。 3. **结束条件**:当模式字符串的所有字符都与待匹配字符串对应时,匹配成功;如果...
3. **比较**:两个字符串相等意味着它们具有相同的长度,并且对应位置的字符都相同。在字典序比较中,较短的字符串在前,或者存在某个位置上的字符在ASCII码中较小。 4. **子串**:字符串中的任何连续字符子序列被...
1. **线性搜索**:从字符串的起始位置开始,逐个字符比较,直到找到子串或者遍历完整个字符串。时间复杂度为O(n)。 2. **双指针法**:设置两个指针,一个指向主串的起始位置,一个指向子串的起始位置,然后逐步移动...
题目中给出的标签“判断子串”提示我们,我们需要编写一个程序或函数,接受两个字符串作为输入,并返回一个布尔值,表示第二个字符串是否为第一个字符串的子串。 在编程中,有多种方法可以实现这个功能。以下是一些...
如果比较到两个字符串的结尾都没有找到不同,那么较短的字符串较小;如果长度相同且所有字符都相等,则认为两个字符串相等。 3. **汇编语言中的字符串操作**: - **加载和存储**:汇编语言通过指令如`MOV`来加载和...
本题目的目标是实现一个字符串快速压缩算法,它将连续重复的字符进行压缩,遵循"字符重复次数+字符"的格式。例如,"xxxyyyyyyz"会被压缩成"3x6yz"。下面我们将详细讨论这个算法的实现及其涉及的关键知识点。 首先,...