编程之法--字符串包含

来源:互联网 发布:剑三捏脸数据不合法 编辑:程序博客网 时间:2024/05/22 20:34

给 定 两 个 分 别 由 字 母 组 成 的 字 符 串 A 和 字 符 串 B,字 符 串 B 的 长 度 比 字 符 串 A 短。请 问, 如 何 最 快 地 判 断 字 符 串 B 中 所 有 字 母 是 否 都 在 字 符 串 A 里?

package cn.algorithm;/** * @author Duoduo * @version 1.0 * @date 2017/4/17 21:24 */public class StringContain {    public static void main(String[] args) {        char[] a = new char[5];        a[0] = 'a';        for (int i = 1; i < a.length; i++) {            a[i] = (char) (a[0] + i);        }        char[] b = {'a', 'b'};        boolean result = stringContain(a, b);        System.out.println(result);    }    /**     * 给 定 两 个 分 别 由 字 母 组 成 的 字 符 串 A 和 字 符 串 B,字 符 串 B 的 长 度 比 字 符 串 A 短。     * 请 问, 如 何 最 快 地 判 断 字 符 串 B 中 所 有 字 母 是 否 都 在 字 符 串 A 里?     * 一个int是32位     * 利用类似hash算法的原理     * 1.把a数组中的所有的数据存放在一个hashTable中     * 2.遍历数组b中的所有数据是否在hashTable中,如果都存在,则是包含关系,只要有一个不存在,则不是包含关系     *     * @param a     * @param b     * @return     */    public static boolean stringContain(char[] a, char[] b) {        int hash = 0;        for (int i = 0; i < a.length; i++) {//            System.out.println("===================");//            System.out.println(a[i]);//            System.out.println(a[i] - 'A');//            System.out.println(1 << (a[i] - 'A'));            hash |= (1 << (a[i] - 'A'));            System.out.println(hash);        }        for (int i = 0; i < b.length; i++) {            if ((hash & (1 << (b[i] - 'A'))) == 0) {                return false;            }        }        return true;    }}
0 0
原创粉丝点击