面试时看到一个试题, 编写算法, 快速找出两个字符串中所有相同的字符. 现实现如下:

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. 找出两个字符串中所有共同的字符_面试中的两个字符串问题竟给我整懵了?!| 原力计划...

    作者 | 一路向维 责编 | 王晓曼 出品 | CSDN博客 昨天收到通知,今天有个面试,一家魔都中型电商公司,名字咱就不说了.内心顿时踌躇满志.跃跃欲试,晚上还翻看面试题,做准备. 到了目的地之后, ...

  2. js 快速找出两个数组中的不同元素或对象

    js 快速找出两个数组中的不同元素 var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1 ...

  3. 找出两个字符串中最大子字符串,如abractyeyt,dgdsaeactyey的最大子串为actyet

    // 最大子字符串.cpp : 定义控制台应用程序的入口点. // //找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的 ...

  4. 找出两个字符串中最长的相同子字符串

    //找出两个字符串中最长的相同子字符串public class Stringdemo {public static void main(String[] args) {String str1 = ne ...

  5. java基础—找出两个字符串中最大的子串

    // 找一个字符串的最大子串public static void main(String[] args) {String s1 = "qwerabcdtyuiop";String ...

  6. C语言找出两个字符串唯一不同的一个字符(附完整源码)

    C语言找出两个字符串唯一不同的一个字符 C语言找出两个字符串唯一不同的一个字符完整源码(定义,实现,main函数测试) C语言找出两个字符串唯一不同的一个字符完整源码(定义,实现,main函数测试) ...

  7. java找出两个字符串中所有共同的子串_【Java笔记】

    Leetcode 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...

  8. 【正则表达式测试工具】使用正则表达式快速找出两列数据中不同的行

    例如像下面的这样的一堆海量数据(已省略部分),可能有几千组,在不编程的情况下如何快速找到不同的行?可能excel有办法,但是处理起来应该没我这样方便的. b_start b_end 100790 10 ...

  9. 表格字体缩小 php_如何快速找出两个Excel表格不同的地方?

    上一篇文章介绍了如何快速找出两个word文档不同的地方,这篇文章来说说如何快速找出两个Excel表格不同的地方,这里说的两个Excel表格,可以是同一个工作簿的不同sheet,也可以是两个不同的Exc ...

最新文章

  1. vpwm的控制变频_变频V/F和矢量控制你知道区别吗?据说这四种控制没有几人能说清...
  2. php 安装pdo odbc,关于PHP安装扩展pdo_odbc
  3. ios系统中各种设置项的url链接
  4. 操作系统上机题目(多线程1)
  5. IntelliJ Idea工作笔记004---IDEA中在Run DashBoard中添加项目
  6. Java面试的基础题20190000
  7. php生成静态页的方法
  8. 中国妇女儿童统计资料(2014-2020年)
  9. JSP登录中Session的用法
  10. iOS 生成证书、描述文件、打包上架Appstore详细流程
  11. linux系统怎么拨号上网,linux配置上网 linux adsl拨号上网设置
  12. java hotspot server_Java HotSpot(TM)64位服务器VM警告
  13. java 替换空白字符串
  14. 权力的游戏——读《原则2 :应对变化中的世界秩序》(中)
  15. Adrealm智库专栏:数据之示—浅谈数据主义、区块链与广告
  16. vue控制滚动条滑到某个位置
  17. android 4.4.3和4.4.4,刷机大师V3.4.4发布 完美支持一加、红牛等Android 4.4系统
  18. Command ‘pip‘ not found, but can be installed with:
  19. 华为鸿蒙编译器下载,华为方舟编译器
  20. 内网服务通过frp内网穿透映射到公网

热门文章

  1. Oracle OCP证书贵在名副其实
  2. 小程序用别人的服务器,微信小程序可以用自己的服务器么
  3. 七牛云私有空间文件下载
  4. LED8X8点阵循环滚动显示
  5. 《庶女:明兰传》知否知否应是绿肥红瘦 epub格式下载
  6. 【小程序】WXML模板语法
  7. [Linux]搭建Anki同步服务器(针对Anki2.1)
  8. 手把手教你在64位Win7下部署16位汇编学习环境
  9. java迅雷下载excel,用servlet实现excel文件下载,用迅雷下载时文件名有关问题
  10. 下载试用华秋DFM,让鹏老师恰口饭!