一道面试题的反思

来源:互联网 发布:java windows相对路径 编辑:程序博客网 时间:2024/05/22 15:45

先看看这道面试题:请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
我相信见过这道面试题的仁兄已经很多了,因为这道题目是来自《程序员面试金典》这本书。而今天我要说的答案确是来自于牛客网上网友们的答案:

import java.util.*;public class Different {    public boolean checkDifferent(String iniString) {        return !iniString.matches(".*(.)(.*\\1).*");    }}

我们可以看到这段代码简洁,而且不会出错(正则的强大不可想象),但是我们忽略了正则表达式的实现。如果正则表达式在实现过程中用了额外的空间,那么我们用正则表达式来完成这道算法题就是不对的。好了,话不多说,我们来翻翻源代码。于是,我找到了这段代码(我用的是open JDK)(这段代码是属于java.util.regex.Matcher类当中第36到43行)

 Matcher(Pattern var1, CharSequence var2) {        this.parentPattern = var1;        this.text = var2;        int var3 = Math.max(var1.capturingGroupCount, 10);        this.groups = new int[var3 * 2];        this.locals = new int[var1.localCount];        this.reset();    }

有由此可以看出我们用正则表达式来解决这到题目就是不对的。

tips

以上皆是小弟愚解,如有不对,还请大神指教。

1 0
原创粉丝点击