Horspool算法(java)随机生成字符串

java代码

import java.util.Scanner;

public class Horspool {
    public static void ShiftTable(char[] p, int[] table){
        for (int i = 0; i < 26; i++) {
            table[i] = p.length;
        }
        for (int i = 0; i < p.length - 1; i++) {
            table[p[i] -‘A‘] = p.length - 1 - i;
        }
    }
    public static int HorspoolMatching(char[] text, char[] template,int[] table){
        ShiftTable(template, table);
        int i = template.length - 1;
        while(i <= text.length){
            int k = 0;
            while(k < template.length && template[template.length - 1 - k] == text[i-k])
                k++;
            if(k == template.length)
                return i - template.length +1;
            else
                i += table[text[i]-‘A‘];
        }
        return -1;
    }// Horspool算法
    public static int Matching(char[] text, char[] template){
        for (int i = 0; i < text.length; i++) {
            int k = 0;
            for (; k < template.length; k++) {
                if(text[i+k] != template[k])
                    break;
            }
            if(k == template.length)
                return i;
        }
        return -1;
    } // 蛮力法
    public static String getRandomString(long length) {
        System.out.println("正在生成文本");
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
                long result = 0;
                result = Math.round(Math.random() * 25 + 97);
                sb.append(String.valueOf((char) result));
            }
        System.out.println("成功生成");
        return sb.toString();
    } // 随机生成字符串

    public static void main(String[] args) {
        int[] table = new int[26];
        Scanner in = new Scanner(System.in);

//        System.out.println("输入匹配的文本");
//        String te = in.nextLine();
//        System.out.println("输入匹配的模板");
//        String t = in.nextLine();
        String te = getRandomString(100000000);
        String t = getRandomString(10000);

        te = te.toUpperCase();
        t = t.toUpperCase();
        char[] text = te.toCharArray();
        char[] template = t.toCharArray();

        System.out.println("---------Horspool算法-----------");
        long start1=System.currentTimeMillis();
        int pos1 = HorspoolMatching(text, template, table);
        long end1=System.currentTimeMillis(); //获取结束时间
        if(pos1 == -1)
            System.out.println("没有匹配的字符串!");
        else
            System.out.println("存在匹配的字符串,初始位置为:" + pos1);
        System.out.println("程序运行时间: " + (end1 - start1) + "ms");

        System.out.println("------------蛮力法--------------");
        long start2=System.currentTimeMillis();
        int pos2 = Matching(text, template);
        long end2=System.currentTimeMillis(); //获取结束时间
        if(pos2 == -1)
            System.out.println("没有匹配的字符串!");
        else
            System.out.println("存在匹配的字符串,初始位置为:" + pos2);
        System.out.println("程序运行时间: "+(end2 - start2)+"ms");

    }
}

结果(跑个时间)

原文地址:https://www.cnblogs.com/shish/p/12685731.html

时间: 2024-10-21 12:39:10

Horspool算法(java)随机生成字符串的相关文章

java随机生成字符串工具类

package aA; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** * 字符随机生成类 */ public class RandomDemo { /** * 随机产生类型枚举 */ public static enum TYPE { /**小字符型*/ LETTER, /**大写字符型*/ CAPITAL, /**数字型*/ NUMBER, /**大+小字符 型*/ LETTE

java随机生成字符串并排序

1 package com.Imooc; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.List; 6 import java.util.Random; 7 8 /** 9 * 利用Collections.sort()方法对泛型为String的List进行排序 10 * 1. 创建List<String>之后往其中添加十条随机字符串 11 * 2. 每条字符串为10以内的随机

Java随机取字符串的工具类

原文:Java随机取字符串的工具类 源代码下载地址:http://www.zuidaima.com/share/1550463479532544.htm Java 随机取字符串的工具类 可以全部是数字,字符,也可以字符和数字组合的工具类,希望能给大家带来帮助 package com.zuidaima.test; import java.util.Random; public class RandomUtils { public static final String ALLCHAR = "012

java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文

现在网上大多数用于判断中文字符的是 U+4E00..U+9FA5 这个范围是只是"中日韩统一表意文字"这个区间,但这不是全部,如果要全部包含,则还要他们的扩展集.部首.象形字.注间字母等等; 2E80-A4CF: 包含了中日朝部首补充.康熙部首.表意文字描述符.中日朝符号和标点.日文平假名.日文片假名.注音字母.谚文兼容字母.象形字注释标志.注音字母扩展.中日朝笔画.日文片假名语音扩展.带圈中日朝字母和月份.中日朝兼容.中日朝统一表意文字扩展A.易经六十四卦符号.中日韩统一表意文字.彝

Java随机生成中文汉字(使用高位低位转码)

1 Java随机生成中文汉字 2 /** 3 * 原理是从汉字区位码找到汉字.在汉字区位码中分高位与底位, 且其中简体又有繁体.位数越前生成的汉字繁体的机率越大. 4 * 所以在本例中高位从171取,底位从161取, 去掉大部分的繁体和生僻字.但仍然会有!! 5 * 6 */ 7 @Test 8 public void create() throws Exception { 9 String str = null; 10 int hightPos, lowPos; // 定义高低位 11 Ran

mkpasswd命令(用来随机生成字符串)

shell脚本时可以用到随机生成字符串的工具(可以输入命令后出来的字符串当作密码使用):mkpasswd(make passwd)安装包命令:yum install -y expect 命令:mkpasswd 指定长度:mkpasswd -l +字符串大小(数字)例:mkpasswd -l 12 指定有几个特殊符号:mkpasswd -l +字符串大小(数字) -s 特殊符号数量(数字)例:mkpasswd -l 12 -s 3(12位有三个特殊符号) 原文地址:http://blog.51ct

随机生成字符串,可用来当id

// 随机生成字符串RandomNumb(n) { let str = 'abcdefghijklmnopqrstuvwxyz9876543210'; let tmp = '', i = 0, l = str.length; for (i = 0; i < n; i++) { tmp += str.charAt(Math.floor(Math.random() * l)); } return tmp;}var id = vm.RandomNumb(20)console.log(id) 原文地址:

java中随机生成字符串的方法(三种)

1.生成的字符串每个位置都有可能是str中的一个字母或数字,需要导入的包是import java.util.Random; //length用户要求产生字符串的长度 public static String getRandomString(int length){ String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random=new Random(); StringB

随机生成字符串方法

1 package beifeng.hadoop; 2 3 import java.util.Random; 4 import org.apache.commons.lang.RandomStringUtils; 5 6 /** 7 * Three Methods to generate random string. 8 */ 9 10 public class RandomString { 11 /** 12 * 生成的字符串每个位置都有可能是str中的一个字母或数字,需要导入的包是impor