快速找出两个字符串中所有相同的字符
面试时看到一个试题, 编写算法, 快速找出两个字符串中所有相同的字符. 现实现如下:
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下 实 快 所 时 有 现 的 试 速 题
快速找出两个字符串中所有相同的字符相关推荐
- 找出两个字符串中所有共同的字符_面试中的两个字符串问题竟给我整懵了?!| 原力计划...
作者 | 一路向维 责编 | 王晓曼 出品 | CSDN博客 昨天收到通知,今天有个面试,一家魔都中型电商公司,名字咱就不说了.内心顿时踌躇满志.跃跃欲试,晚上还翻看面试题,做准备. 到了目的地之后, ...
- js 快速找出两个数组中的不同元素或对象
js 快速找出两个数组中的不同元素 var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1 ...
- 找出两个字符串中最大子字符串,如abractyeyt,dgdsaeactyey的最大子串为actyet
// 最大子字符串.cpp : 定义控制台应用程序的入口点. // //找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的 ...
- 找出两个字符串中最长的相同子字符串
//找出两个字符串中最长的相同子字符串public class Stringdemo {public static void main(String[] args) {String str1 = ne ...
- java基础—找出两个字符串中最大的子串
// 找一个字符串的最大子串public static void main(String[] args) {String s1 = "qwerabcdtyuiop";String ...
- C语言找出两个字符串唯一不同的一个字符(附完整源码)
C语言找出两个字符串唯一不同的一个字符 C语言找出两个字符串唯一不同的一个字符完整源码(定义,实现,main函数测试) C语言找出两个字符串唯一不同的一个字符完整源码(定义,实现,main函数测试) ...
- java找出两个字符串中所有共同的子串_【Java笔记】
Leetcode 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...
- 【正则表达式测试工具】使用正则表达式快速找出两列数据中不同的行
例如像下面的这样的一堆海量数据(已省略部分),可能有几千组,在不编程的情况下如何快速找到不同的行?可能excel有办法,但是处理起来应该没我这样方便的. b_start b_end 100790 10 ...
- 表格字体缩小 php_如何快速找出两个Excel表格不同的地方?
上一篇文章介绍了如何快速找出两个word文档不同的地方,这篇文章来说说如何快速找出两个Excel表格不同的地方,这里说的两个Excel表格,可以是同一个工作簿的不同sheet,也可以是两个不同的Exc ...
最新文章
- vpwm的控制变频_变频V/F和矢量控制你知道区别吗?据说这四种控制没有几人能说清...
- php 安装pdo odbc,关于PHP安装扩展pdo_odbc
- ios系统中各种设置项的url链接
- 操作系统上机题目(多线程1)
- IntelliJ Idea工作笔记004---IDEA中在Run DashBoard中添加项目
- Java面试的基础题20190000
- php生成静态页的方法
- 中国妇女儿童统计资料(2014-2020年)
- JSP登录中Session的用法
- iOS 生成证书、描述文件、打包上架Appstore详细流程
- linux系统怎么拨号上网,linux配置上网 linux adsl拨号上网设置
- java hotspot server_Java HotSpot(TM)64位服务器VM警告
- java 替换空白字符串
- 权力的游戏——读《原则2 :应对变化中的世界秩序》(中)
- Adrealm智库专栏:数据之示—浅谈数据主义、区块链与广告
- vue控制滚动条滑到某个位置
- android 4.4.3和4.4.4,刷机大师V3.4.4发布 完美支持一加、红牛等Android 4.4系统
- Command ‘pip‘ not found, but can be installed with:
- 华为鸿蒙编译器下载,华为方舟编译器
- 内网服务通过frp内网穿透映射到公网