- 浏览: 102883 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
dreamoftch:
...
对hibernate的理解 -
quanwsx:
对hibernate的理解 -
zxt1985:
太坑爹了……啥都没
**java网络编程 -
Java_zhou:
坑爹啊。。。
**java网络编程 -
juda:
this code can not work rightly ...
Reverse String
给以文件,文件中每一行是一个单词,求出每个单词的最小前缀,使得该最小前缀能够代表这个单词。(当没有任何其他单词与之有共同的该前缀,该前缀就是最小前缀了。)
例如:
输入文件为:
cat
catt
cbtd
batty
abttyy
那么应该输出:
[前缀] [单词]
cat cat
catt catt
cb cbtd
b batty
a abttyy
编写代码时遇到了ConcurrentModificationException 异常,解决方法参考:http://61234865.iteye.com/category/98984?show_full=true
原理参考:
http://www.iteye.com/topic/656670
http://www.iteye.com/topic/164644
http://www.iteye.com/topic/344876
http://www.blogjava.net/houlinyan/archive/2008/04/01.html
http://hi.baidu.com/latte88/blog/item/598b1e38d38366ced46225e1.html
这些原理看得很晕,现在只知道用ConcurrentHashMap代替HashMap可以解决该问题。
本文提供了代码下载,请高手用比较简单易懂的话告诉我原理吧。
package org.jyjiao; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.io.*; public class StrPre { public void getPrefix(String path){ ConcurrentHashMap<String,String> map=new ConcurrentHashMap<String,String>(); //HashMap<String,String> map=new HashMap<String,String>(); //这样会抛出ConcurrentModificationException 异常 try{ BufferedReader br=new BufferedReader(new FileReader(path)); String str; String value; String key; int tag=0; while((str=br.readLine())!=null){ key=str.substring(0,1); if(map.containsKey(key)){ value=map.get(key); value+="|"+str; }else{ value=str; } map.put(key,value); } int len=2; int flag=0; Iterator it=map.entrySet().iterator(); while(true){ while(it.hasNext()){ Map.Entry me=(Map.Entry)it.next(); String mKey=(String)me.getKey(); String mValue=(String)me.getValue(); String[] varray=mValue.split("\\|"); // 第二个\用于对|转义,第一个\用于对第二个\转义 String keypre,valuepre; if(varray.length>1 &&(flag==0||(flag==1&&mKey.length()<len))){ tag=1; flag=1; for(int i=0;i<varray.length;i++){ if(varray[i].length()>=len){ key=varray[i].substring(0,len); keypre=varray[i].substring(0,len-1); if(map.containsKey(key)){ value=map.get(key); value+="|"+varray[i]; }else{ value=varray[i]; } map.put(key,value); if(map.containsKey(keypre)){ valuepre=map.get(keypre); int index1=valuepre.indexOf(varray[i]); int index2=valuepre.indexOf("|",index1); String pre=valuepre.substring(0,index1); String post; if(index2==-1){ post=""; }else{ post=valuepre.substring(index2+1); } valuepre=pre+post; map.put(keypre,valuepre); } } } keypre=varray[0].substring(0,len-1); String strt=(String)map.get(keypre); if(strt.length()==0){ it.remove(); //安全的删除操作 //map.remove(keypre);//不推荐的删除操作 } } } if(tag==0){ break; } it=map.entrySet().iterator(); tag=0; flag=0; len++; } // System.out.println(map); Iterator ret=map.entrySet().iterator(); while(ret.hasNext()){ Map.Entry me1=(Map.Entry)ret.next(); System.out.println(me1.getKey()+" "+me1.getValue()); } br.close(); }catch(Exception ex){ ex.printStackTrace(); } } public static void main(String[] args) { StrPre strpre = new StrPre(); strpre.getPrefix("C:/jtest/8/0811/word.txt"); } }
发表评论
-
0928--算法题
2010-09-28 11:14 1554算法设计:n个连续自然数,乱序存放于一个数组中,缺失一个,缺失 ... -
Reverse String
2010-09-19 16:46 1000package org.jyjiao; public c ... -
0906--拼接出最小整数
2010-09-06 10:38 1180题目描述:设有n个正整数,将它们联接成一排,组成一个最小的多位 ... -
0830--算法练习题
2010-08-28 17:42 9291. 内存中有一个长数组,条目数为10万,数组单元为结构体st ... -
??0829-Joseph问题
2010-08-28 16:39 871N个人排成一圈,指定第一个人,去除他,然后跳着一人去除第3人, ... -
???0828--存储空间管理器+n选m问题
2010-08-28 16:36 1031用单链表实现一个存储空间管理器,包括分配和释放空间。要求释放 ... -
# 0827--算法练习题
2010-08-25 14:12 8181. 一个文本文件有多行 ... -
!!!0826--图
2010-08-25 14:11 649baidu1 -
###0825-1 最短路径+最小支撑树+路径压缩+等价类问题+拓扑排序
2010-08-25 13:28 832dijkska算法实现 floyed算法实现 ... -
# 0823--树进阶
2010-08-25 13:27 7311. 判断一棵二叉树是否平衡 2. 构造AVL ... -
#0822 系分
2010-08-23 14:18 670http://www.blogjava.net/ITdavid ... -
0821集合问题
2010-08-23 14:16 785{ aaa, bbb, ccc},{bbb, ddd }, { ... -
0820-mirosoft
2010-08-20 12:43 948传说中微软的几道算法题,练习一下吧: 1.设计一个 ... -
0819- 找共同url
2010-08-18 17:47 829给你a、b两个文件,各存放50亿条url,每条url各占用64 ... -
0819--找队友
2010-08-18 11:52 1044全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的 ... -
0817--概率问题
2010-08-16 18:53 736输入:N(整数)输入:数据文件A.txt,不超过6条记录,字符 ... -
0816--支配数
2010-08-16 18:52 769支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配 ... -
0815-二叉树
2010-08-14 11:10 967第一题: 在一棵一般的二叉树中找到指定的元素,如果有重 ... -
0811-3 对webservice执行自动化测试
2010-08-11 20:05 9510811-3 对webservice执行自动化测试 i ... -
0812-字典树算法
2010-08-11 19:59 19571. 在用户输入英文单词时,经常发生错误,我们需要对其进行纠错 ...
相关推荐
在解决LeetCode上的前缀树问题时,你可能会遇到各种变体,如查找所有以特定前缀开头的单词、统计特定模式的出现次数,或者构建最小覆盖前缀树等。这些题目将测试你对前缀树的理解以及使用PHP解决问题的能力。 通过...
根据提供的文件信息,我们可以从中提炼出关于VisualBasic(VB)编程的知识点,包括命名约定、代码规范以及部分控件和数据库对象的命名前缀。以下是对这些知识点的详细说明: 1. 命名约定的目的和重要性 命名约定的...
# 常见数据结构与算法C语言实现 内容包含常见基本数据结构实现(C语言版)如各自排序、链表、栈、队列、各种树以及应用、图算法、字符串匹配算法、回溯、并查集等 ...- 前缀中缀求后缀 - 哈密顿环
2. **构造状态**:每个状态代表文法中的一个特定信息,例如当前识别到的活前缀。初始状态通常对应空字符串,而每个后续状态表示添加了一个或多个字符后的活前缀。 3. **确定转移**:基于文法规则,我们需要定义状态...
2. 动态规划思想:通过计算前缀和数组,可以避免重复计算,降低时间复杂度。 3. 双指针法:在这里,指针 i 和 j 分别代表子数组的起始和结束,通过调整它们的位置来遍历不同长度的子数组。 4. 最大值和最小值的查找...
计算活前缀通常与构造正规表达式的最小确定有限自动机(DFA)相关。当给定一组产生式和起始符号时,可以通过以下步骤计算活前缀: 1. **构造闭包集:** 对于每个产生式,计算其所有可能的非终结符序列,形成闭包集...
1. 前缀表达式(Prefix Expression):运算符在操作数之前,如 `+ * a b * - c / d e f` 2. 中缀表达式(Infix Expression):运算符在操作数之间,如 `a * b + c - d / e * f` 3. 后缀表达式(Postfix Expression)...
我的系统配置文件buildvim:从源存储库构建 VIM 目录.bash_functions .bash_profile .bashrc .dircolors:Bash Shell 配置.gtkrc-2.0 .gtkrc-solarized:最小的 GTK 主题.vimrc .vim/: VIM 插件和设置.Xdefaults:...
2. **区间查询**:已知前缀和,可以迅速求出任意子区间[A[i], A[j]](i )的和,只需S[j] - S[i-1]即可。 3. **差分操作**:若数组B[i] = A[i+1] - A[i],则B的前缀和可以用于求解原数组A的某些问题,例如求解连续子...
7. **扩展应用**:最大最小表示法还可以与其他数据结构结合,如前缀树(Trie)、后缀数组等,以增强其功能和性能。例如,与Trie结合可以实现高效的字符串查找和模式匹配。 8. **优化**:为了进一步提高性能,可以...
包括最小主题和组件加载项目后,请查看Github页上 ,以及index.html文件。入门选择“使用此模板”以将该项目复制到您自己的新仓库中。 可选:运行查找/替换tdbc以更新到您的首选前缀(或调整stylelint设置)。 您...
三、加上前缀--FE80::0250:3EFF:FEE4:4C00 这就是一个完整的IPV6地址 反转的原因: 在MAC地址中,第7比特为1表示本地管理,为0表示全球管理 在EUI-64格式中,第7位为1表示全球惟一,为0表示本地惟一 组播地址...
1. **命令和变量**:在Tcl中,命令以空格分隔,变量名前缀为 `$`。例如,`set x 10` 声明了一个名为 `x` 的变量并赋值为 `10`。 2. **字符串操作**:Tcl字符串可以用双引号 `""` 或反斜杠 `\` 转义字符。例如,`puts...
例如,对于数组`arr = [1, 2, 3, 4]`,其前缀和数组为`preSum = [1, 3, 6, 10]`。 前缀和的主要优势在于可以快速求解区间和。假设我们想要查询数组`arr`从索引`l`到`r`的和,只需要用`preSum[r]`减去`preSum[l-1]`...
2. **求子数组最大/最小值**:通过两次遍历数组,一次计算前缀和,一次计算后缀和,可以找到数组中的最大连续子数组和或最小连续子数组和,如Kadane's algorithm。 3. **异或操作**:数组元素的异或运算也满足前缀和...
8. **非前缀码**:在信息论中,非前缀码是一种编码方式,确保没有一个码字是另一个码字的前缀。在数据压缩和通信中,非前缀码能避免编码解析的歧义。 9. **动态生成最小二叉排序树**:二叉排序树是一种特殊的二叉树...
- PRIM求最小生成树(MST):用于找出加权无向图的最小生成树。 - 次小生成树:找出加权无向图的第二小的生成树。 - 最小生成森林问题:处理图中有K颗树时的最小生成问题。 - 有向图最小树形图:求解给定有向图的最小...
2. **避免过度依赖**:虽然前缀可以帮助解决兼容性问题,但应尽量减少对它们的依赖,因为随着时间推移,某些前缀可能会被淘汰。例如,Opera(`-o-`)已经不再使用其私有前缀。 3. **自动化的工具**:利用像...
最后,dp[n][m]即为所求的结果,表示将整个序列分割成m段时,子序列和的最大值最小是多少。 以下是一段C语言实现的测试代码: ```c #include #define N 100 int n, m; int a[N], sum[N]; int dp[N][N]; int ...
以上就是江苏海洋大学22-23-2学期数据结构课程中涉及的关键知识点,涵盖了树的遍历、赫夫曼编码、哈希表、图的最小生成树以及网络计划问题。通过这些练习,学生能够深入理解数据结构的核心概念,并具备解决实际问题...