[算法]判断两个字符串是否由相同的字符组成
2016-05-07 14:57
302 查看
如何判断两个字符串是否由相同的字符组成
题目描述:由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同而已。例如”aaaabbc”与”abcbaaa”就由相同的字符组成的。
方法一:
排序法,将两个字符串中的字符排序,比较两个排序后的字符串是否相等。若相等则表明它们是由相同的字符组成的,否则,表明他们是由不同的字符组成的。
import java.util.Arrays; public class Solution { public static void compare(String s1,String s2){ byte[] b1 = s1.getBytes(); byte[] b2 = s2.getBytes(); Arrays.sort(b1); Arrays.sort(b2); s1 = new String(b1); s2 = new String(b2); if(s1.equals(s2)){ System.out.println("equal"); }else { System.out.println("not equal"); } } public static void main(String[] args) { String s1 = "aaaabbc"; String s2 = "abcbaaa"; compare(s1, s2); s1 = "aaaabbc"; s2 = "abcbaab"; compare(s1, s2); } }
以上方法取决于排序算法的时间复杂度,由于最快的排序算法的时间复杂度为O(nlogn),因此,该方法的时间复杂度也为O(nlogn)。
方法二:
空间换时间,假设字符串只使用ASCAII字符,由于ASCAII字符只有266个(对应的编码为0~255),在实现时可以通过申请大小为266的数组来记录各个字符出现的个数,并初始化为0,然后遍历第一个字符串,将字符串中字符对应的ASCII码值作为数组下标,把对应数组的元素加1,然后遍历第二个字符串,把数组中对应的元素值-1.如果最后数组中各个元素的值都为0,说明这两个字符串是由相同的字符组成的;否则,说明这两个字符串是由不同的字符组成的。
代码如下:
package 判断两个字符串是否由相同的字符组成; public class Solution1 { public static void compare(String s1, String s2) { byte[] b1 = s1.getBytes(); byte[] b2 = s2.getBytes(); int[] bCount = new int[256]; for (int i = 0; i < 256; i++) { bCount[i] = 0; } for (int i = 0; i < b1.length; i++) { bCount[b1[i] - '0']++; } for (int i = 0; i < b2.length; i++) { bCount[b2[i] - '0']--; } for (int i = 0; i < 256; i++) { if (bCount[i] != 0) { System.out.println("not equal"); return; } } System.out.println("equal"); } public static void main(String[] args) { String s1 = "aaaabbc"; String s2 = "abcbaaa"; compare(s1, s2); s1 = "aaaabbc"; s2 = "abcbaab"; compare(s1, s2); } }
方法二时间复杂度为O(n),但是申请了额外的空间。
相关文章推荐
- 《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数之前的过程
- XMLHttpRequest发送POST请求
- 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
- bzoj1811 mea
- [置顶] iOS的开发中的错误解决方案
- 关于SIGCHLD 信号
- Codeforces 165E Compatible Numbers 【dp】
- chromium的英文缩写
- 用通俗易懂的大白话讲解Map/Reduce原理
- 第43讲——项目1(2)
- URAl 1416 Confidential【次小生成树】
- php实现图片上传、剪切功能
- android databinding之include
- hadoop之 flume1.6安装
- cocoapod 快速更新,加载
- 【iOS】this class is not key value coding-compliant for the key ...
- HTML
- sqlite数据库部署到服务器上的问题
- debug时按F8/F6不起作用
- python的正则表达式re模板