《编程珠玑》第二章问题C:找出相同的英文单词(单词改变顺序可以互相转化即为相同)
来源:互联网 发布:北京软件 编辑:程序博客网 时间:2024/05/02 04:37
public class FindSameWord { public static void main(String[] args) { // TODO Auto-generated method stub String filename = "doc//obama.txt"; FindSameWord fs = new FindSameWord(); String txt = fs.getTXT(filename); ArrayList<String> arrayList = new ArrayList<String>(); HashMap<String, String> fingerPrint = new HashMap<String, String>(); StringTokenizer st = new StringTokenizer(txt, ", ! ' . ��");// 按逗号/空格/叹号分割,其他字符自行添加 while (st.hasMoreElements()) { String tmp = (String) st.nextElement(); if (tmp != "" && tmp != null && tmp != "s" && !arrayList.contains(tmp.toLowerCase())) arrayList.add(tmp.toLowerCase()); } System.out.println(arrayList.size()); fs.sortList(arrayList); for (int i = 0; i < arrayList.size(); i++) {// System.out.println(i + "," + arrayList.get(i) + ":"); if (!fingerPrint.containsKey(fs.makeFinger(arrayList.get(i)))) fingerPrint.put(fs.makeFinger(arrayList.get(i)), arrayList.get(i)); else fingerPrint.put(fs.makeFinger(arrayList.get(i)), fingerPrint.get(fs.makeFinger(arrayList.get(i))) + "," + arrayList.get(i)); } for (Map.Entry<String, String> entry : fingerPrint.entrySet()) {// System.out.println(entry.getKey() + "--->" + entry.getValue()); if (entry.getValue().contains(",")) System.out.println(entry.getKey() + "--->" + entry.getValue()); }// System.out.println(fs.stringSort("alive"));// System.out.println(fs.makeFinger("aliive")); } String getTXT(String filename) { String txt = ""; try { File file = new File(filename); BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件 String s = null; while ((s = br.readLine()) != null) {//使用readLine方法,一次读一行 txt = txt + s; } br.close(); } catch (Exception e) { e.printStackTrace(); } return txt; } ArrayList<String> sortList(ArrayList<String> al) { for (int i = 0; i < al.size(); i++) { for (int j = i + 1; j < al.size(); j++) { if (!stringCompare(al.get(i), al.get(j))) { String tmp = al.get(i); al.set(i, al.get(j)); al.set(j, tmp); } } } return al; } boolean stringCompare(String a, String b) { int aLength = a.length(); int bLength = b.length(); int length = 0; if (aLength > bLength) length = bLength; else length = aLength; for (int i = 0; i < length; i++) { if (a.charAt(i) < b.charAt(i)) return true; if (a.charAt(i) > b.charAt(i)) return false; } if (aLength > bLength) return false; else return true; } String makeFinger(String s) { if (s.length() == 1) return s; String fingerPrint = ""; String print = stringSort(s);// System.out.println("print"+print); char now = print.charAt(0); int count = 1; for (int i = 1; i < print.length(); i++) { if (print.charAt(i) == now) { count++; if (i == print.length() - 1) fingerPrint = fingerPrint + String.valueOf(now) + String.valueOf(count); } else { if (count == 1) fingerPrint = fingerPrint + String.valueOf(now); else fingerPrint = fingerPrint + String.valueOf(now) + String.valueOf(count); count = 1; now = print.charAt(i); if (i == print.length() - 1) fingerPrint = fingerPrint + String.valueOf(now); } }// System.out.println(fingerPrint); return fingerPrint; } String stringSort(String s) { String after = ""; char[] tmp = s.toCharArray(); for (int i = 0; i < tmp.length; i++) { for (int j = i + 1; j < tmp.length; j++) { if (tmp[i] > tmp[j]) { char hou = tmp[j]; tmp[j] = tmp[i]; tmp[i] = hou; } } } after = String.valueOf(tmp);// System.out.println(after); return after; }}
0 0
- 《编程珠玑》第二章问题C:找出相同的英文单词(单词改变顺序可以互相转化即为相同)
- 给你m个东西,放在n个相同的盒子中(相同,即不计顺序),每个盒子可以放任意多,问有多少种放法
- leetcode 相同字母组成的不同单词归为一类即所谓的变位词
- Eclipse中,点击某一单词,其他相同单词没有改变底色提示的问题
- 向量abc转换为cba(如何交换非邻接内存块的问题) 编程珠玑 第二章 问题 5
- 编程珠玑第二章问题A,B,C
- 编程珠玑(第二版) 第二章 问题A
- C语言实现检查单词是否为变位词(相同字母的重新排列)
- 找出n个元素中最小的k个数(编程珠玑第二章)
- 给出一个2D板和一个单词,找出这个单词是否存在于网格中。 该单词可以由顺序相邻单元的字母构成,其中“相邻”单元是水平或垂直相邻的单元。 相同的字母单元可能不会被多次使用。
- 将一个句子里的英文单词倒叙输出,但不改变单词里的字母顺序
- 编程珠玑:第二章,3个问题
- 编程珠玑-第二章问题A
- 《编程珠玑 》第二章 问题A 总结
- 【Practice】对一个词典处理,找出拼写含有相同字母的单词如stop和spot
- 编程珠玑第二章
- 编程珠玑第二章
- 编程珠玑第二章
- SQL SERVER 表与表之间 字段一对多
- C语言可变参数
- Template Method模式
- EF| CodeFirst 代码先行
- GTK重拾--00
- 《编程珠玑》第二章问题C:找出相同的英文单词(单词改变顺序可以互相转化即为相同)
- 上传iOS项目到CocoaPods
- Caused by: java.lang.UnsupportedOperationException
- 8.3.14 Paint几个枚举-常量值以及ShadowLayer阴影效果
- QT 打不开工程
- OpenStack学习:qemu(一)
- Makefile write skill
- 新手从零到初步会用百度地图SDK 的经典步骤
- 视频画中画学习