快速找出两个字符串中所有相同的字符
来源:互联网 发布:居民阻挠电信安装端口 编辑:程序博客网 时间:2024/09/21 09:03
面试时看到一个试题, 编写算法, 快速找出两个字符串中所有相同的字符. 现实现如下:
1. 利用TreeSet来查找是否有相同的字符(之前是利用TreeSet来查找)
2. 利用HashSet来查找是否有相同的字符(改进后利用HashSet来查找)
经测试,HashSet几乎在所有情况下都比TreeSet耗时更少。HashSet的底层实现决定了其能比TreeSet更快速的处理该问题。
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Collection;import java.util.HashSet;import java.util.TreeSet;public class CharFilter {// 利用TreeSet进行 查找public static void filterByTreeSet(String str1, String str2, Collection<Character> result) {// 利用Java的TreeSet进行排序TreeSet<Character> tree1 = new TreeSet<Character>();for (char ch : str1.toCharArray()) {tree1.add(ch);}// 结果集for (char ch : str2.toCharArray()) {// 查找相同的字符boolean contain = tree1.contains(ch);if (contain) {// 加入结果集result.add(ch);}}}// 利用HashSet进行 查找public static void filterByHashSet(String str1, String str2, Collection<Character> result) {// 利用Java的TreeSet进行排序HashSet<Character> tree1 = new HashSet<Character>();for (char ch : str1.toCharArray()) {tree1.add(ch);}// 结果集for (char ch : str2.toCharArray()) {// 查找相同的字符boolean contain = tree1.contains(ch);if (contain) {// 加入结果集result.add(ch);}}}public static void main(String[] args) throws IOException {// 输入流BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));// 输入第一个字符串System.out.println("Please input string 1");String str1 = reader.readLine();// 输入第二个字符串System.out.println("Please input string 2");String str2 = reader.readLine();// 利用Java的TreeSet进行排序TreeSet<Character> result = new TreeSet<Character>();long start, end;long treeGap, hashGap;start = System.currentTimeMillis();for (int i = 0; i < 500000; i++) {filterByTreeSet(str1, str2, result);}end = System.currentTimeMillis();treeGap = end - start;// 输出相同的字符System.out.println("耗时: " + treeGap);System.out.println("相同的字符数: " + result.size());for (char ch : result) {System.out.print(ch + " ");}result.clear();start = System.currentTimeMillis();for (int i = 0; i < 500000; i++) {filterByHashSet(str1, str2, result);}end = System.currentTimeMillis();hashGap = end - start;// 输出相同的字符System.out.println();System.out.println("耗时: " + hashGap);System.out.println("相同的字符数: " + result.size());for (char ch : result) {System.out.print(ch + " ");}}}测试输出:
Please input string 1面试时看到一个试题, 编写算法, 快速找出两个字符串中所有相同的字符. 现实现如下:Please input string 2经测试,HashSet几乎在所有情况下都比TreeSet耗时更少。HashSet的底层实现决定了其能比TreeSet更快速的处理该问题。耗时: 1576相同的字符数: 11下 实 快 所 时 有 现 的 试 速 题 耗时: 949相同的字符数: 11下 实 快 所 时 有 现 的 试 速 题
1 0
- 快速找出两个字符串中所有相同的字符
- 找出2个字符串中所有相同的字符
- 6.1找出两个字符串第一个相同的字符
- 找出两个字符串中最长的相同的字符串
- 一个字符串数组,找出他们所有存在两个或者两个以上相同的字符串
- 如何获取两个字符串中两个相同的字符
- 删除字符串中相临字符中两个相同的字符
- java找出两个字符串相同的元素
- 编程找出字符串的最长子串,要求子串的所有字符相同
- 找出字符串中的最长子串,要求子串的所有字符相同
- 找出字符串中所有重复的字符及其重复次数
- C#找出字符串中某一字符的所有位置
- Delete characters删除两个字符串中相同的字符
- 两个数组中找出相同的元素
- 找出两个数组中相同的元素
- 使用List实现:找出两个字符串中相同的子串
- 找出字符串的最长子串,要求子串的所有字符相同,如:"abcdeeefgh"结果是"eee"
- 比较两个字符串,找出最大的相同子串
- GRE写作必备句型
- 基于Multisim的buck降压斩波电路仿真
- Mac安装Pyodbc
- Java 的Excel 导出功能的实现
- 编译原理学习基本概念汇总
- 快速找出两个字符串中所有相同的字符
- 单例
- iOS保存数据——属性表使用(1)
- hihoCoder - 1051 - 补提交卡(贪心、枚举)
- codevs1052
- achartengine之折线图---简单用法
- spring mvc 4.1.5+mybatis 3.2.6+ maven
- ios json解析 碰到有转义字符的解决方法
- 读Spring的源代码一:Spring bean的注册过程