trie树,串排序,子串出现次数
来源:互联网 发布:伯爵和唯一视觉知乎 编辑:程序博客网 时间:2024/04/28 11:59
package trie;public class Trie {private int size = 26; //26个字母private TrieNode root;Trie() {root = new TrieNode(); //树的跟节点}private class TrieNode { //节点类private int num; //通过该节点的字符串的数目private TrieNode[] son; //子节点private boolean isEnd; //判断是否是字符串的最后一个字母private char val; //节点值TrieNode() {num = 1;son = new TrieNode[size];isEnd = false;}}public void insert(String str) { //插入操作if (str == null || str.length() == 0) {return;}TrieNode node = root;char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {int pos = chars[i] - 'a'; if (node.son[pos] == null) {node.son[pos] = new TrieNode();node.son[pos].val = chars[i];} else {node.son[pos].num++;}node = node.son[pos];}node.isEnd = true;}public int countPrefix(String preStr) { //查找前缀的数目if (preStr == null || preStr.length() == 0) {return -1;}TrieNode node = root;char[] chars = preStr.toCharArray();for (int i = 0; i < chars.length; i++) {int pos = chars[i] - 'a';if (node.son[pos] == null) {return 0;} else {node = node.son[pos];}}return node.num;}public boolean isExist(String str) {//判断某个字符串是否已经在书中if (str == null || str.length() == 0) {return false;}TrieNode node = root;char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {int pos = chars[i] - 'a';if (node.son[pos] == null) {return false;} else {node = node.son[pos];}}return node.isEnd;}public void preTraverse(TrieNode node) {//前序遍历if (node != null) {System.out.print(node.val);for (TrieNode child : node.son) {preTraverse(child);}}}public void sortStrs(TrieNode node, String str) {//通过前序遍历,按顺序打印字符串if (node != null) {if (node.isEnd == true) {String temp = str + node.val;System.out.println(temp);}for (TrieNode child : node.son) {sortStrs(child, str + node.val);}}}public int countSubStr(String str) {//计算子串出现的次数if (str == null || str.length() == 0) {return 0;}TrieNode node = root;char[] chars = str.toCharArray();for (int i = 0; i < chars.length; i++) {int pos = chars[i] - 'a';if (node.son[pos] == null) {return 0;} else {node = node.son[pos];}}return node.num;}public static void main(String[] args) {Trie tree = new Trie();String[] strs = { "banan", "band", "absolute", "acm" };String[] preFix = { "ba", "band", "abc" };String test = "abcabcabcassadfsdfsd";String subStr = "d";char[] chars = test.toCharArray();for (int i = 0; i < test.length() - 1; i++) {tree.insert(test.substring(i, test.length()));}// for (String str : strs) {// tree.insert(str);// }// tree.preTraverse(tree.root);// tree.sortStrs(tree.root, "");System.out.println(tree.countSubStr(subStr));}}
0 0
- trie树,串排序,子串出现次数
- 子串在父串中出现的次数
- POJ1961 子串重复出现最大次数
- POJ2406 子串重复出现最大次数
- 查找子串出现的次数
- kmp统计子串出现次数
- C:countOfSubstring 查找子串出现次数
- 统计子串出现次数 STL map
- 计算字符串中的子串出现次数
- 连续出现次数最多的子串
- nowcoder--计算子串出现的次数
- 查找子串出现的次数
- 计算子串出现的次数
- 子串在母串中出现的次数
- 连续出现次数最多的子串
- java 查找子串出现的次数
- LA-4513 - Stammering Aliens-(hash字符串+二分答案+hash排序) 找出子串出现次数
- 字符串中连续子串出现次数统计,获取连续出现次数最多的子串
- Android 动画框架详解,第 1 部分
- 关于IO流做的文件搜索器
- Xdex(百度版)脱壳工具基本原理
- JAVA-责任链模式
- unity3d: Asset Store 下载的package存放位置
- trie树,串排序,子串出现次数
- 常用的按钮样式,点击时颜色稍微变深,代码复用
- imx6 板卡移植官方yocto版本(2_定制系统)
- Linux进程间通信——使用共享内存
- 函数指针和函数指针类型
- CTime、CTimeSpan、COleDateTime、COleDateTimeSpan
- Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法
- Linux新建虚拟机设置IP,配置主机映射,连接CRT
- 软件测试分类-按照测试实施组织划分