[算法]判断两个字符串是否由相同的字符组成
来源:互联网 发布:影武者2优化 编辑:程序博客网 时间:2024/05/21 11:57
如何判断两个字符串是否由相同的字符组成
题目描述:
由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同而已。例如”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),但是申请了额外的空间。
0 0
- [算法]判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同的字符组成
- Java 判断两个字符串是否由相同的字符组成
- 如何判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同的字符组成
- 1.4-判断两个字符串是否由相同字符组成
- 判断两个字符串是否由相同字符组成
- 判断两个字符串是否由相同字符组成
- java 判断两个字符串是否由相同的字符组成 排序算法 空间换时间的方法
- 如何判断一个字符串是否由相同的字符组成
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
- 242.两个字符串是否是由相同字母(出现次数也相同)组成的
- 判断两个字符串是否有相同的字符
- Arrays_Strings 判断两个字符串是否有相同的字符 @CareerCup
- 判断两个字符串是否包含相同的字符
- 1.1 判断字符串是否由唯一字符组成
- 算法程序-两个字符串是否是由颠倒字母组成
- 用通俗易懂的大白话讲解Map/Reduce原理
- chromium的英文缩写
- JS学习9(DOM)
- 探讨Spark Streaming的事务处理(第四篇)
- matlab debug
- [算法]判断两个字符串是否由相同的字符组成
- UFLDL 教程学习笔记(二)反向传导算法
- IP地址与域名之间的转换(Linux + GCC)
- 《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数之前的过程
- 读《深度探索C++对象模型》之拷贝构造函数是否有必要明确定义?
- XMLHttpRequest发送XML请求
- Linux 下 zip、tar、tar.gz、tar.bz2 详解
- HDU2084数塔
- 通知服务的使用问题