小编典典

在给定字符串中搜索字符集的最快算法

algorithm

这是我与一位朋友进行的辩论:制作评估方法的最快方法是什么,该方法可以检查给定的字符串是否包含不允许的字符之一

方法一:简单

char [] invalidChars = "!@#$%^...".toCharArray();
        for (int i = 0; i < myString.length(); i++) {
            char ch = myString.charAt(i);
            for (int j = 0; j < invalidChars.length; j++) {
                if (invalidChars[j] == ch) {
                    return false;
                }
            }
        }

方法II:利用地图的O(1)

Map <String,String> map = new HashMap<String, String>();
        map.put("!", null);
        map.put("@", null);
        map.put("#", null);
        map.put("$", null);
        map.put("^", null);
        ...
        for (int i = 0; i < labels.length(); i++) {
            char ch = labels.charAt(i);
            if (map.containsKey(ch)) {
                return false;
            }
            return true;
        }

我的方法实际上是N2,但是当invalidChars的数量较少时,方法I等于N。情况一:有很多无效字符,情况二:只有很少的无效字符,该怎么办?

注意:我不是在寻找任何内置的Java解决方案,而是在寻找过滤少数(不是全部)非文本字符的算法


阅读 262

收藏
2020-07-28

共1个答案

小编典典

如果仅对验证ASCII字符感兴趣,则长度为128的布尔查找表 可能 比上述任何一种方法都快。

2020-07-28