[算法]判断两个字符串是否由相同的字符组成

Java学习手册:(数据结构与算法-字符串)如何判断两个字符串是否由相同的字符组成? 问题描述:由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同,例如“aaaabbc”与“abcbaaa”就由相同的字符组成。 方法一:排序法。即先将两个字符串中的字符进行排序,比较两个排序后的字符串是否相等。 方法二:空间换时间。就本题而言,假设字符串只使用ASCII字符,由于ASSCII字符共有256个(对应得编码为0-255),在实现时可以通过申请大小为2... 阅读详情

如何判断两个字符串是否由相同的字符组成


题目描述:

由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同而已。例如”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),但是申请了额外的空间。

中国高精度年度平均气温栅格数据集(1901-2024) 本文基于中国月度平均气温栅格数据集,计算生成1901-2024年1km分辨率的年度平均气温数据集,并按中国省市行政区划进行裁剪。该数据集融合CRU全球数据和WorldClim高分辨率数据,经496个站点验证,具有高时空精度和长时间序列特点,覆盖全国(含港澳台)逾百年气温记录,为气候变化研究、生态水文分析及农业生产评估等提供重要数据支撑。数据格式为Tif,单位为0.1℃,可获取全国、各省及各市三个尺度的气温栅格数据。 阅读详情

相关推荐

Openharmony 命令行工具hdc的获取与安装

OpenHarmony实战:命令行工具hdc安装应用指南_hdc工具-优快云博客t=N7T8。

Devlin_的博客 1万+

最近的几道题

好久没有题解了,原因是:我太菜了!上次国庆放假的时候,也就是10月2号上午,参加leetcode周赛,我只做出来2道easy的,剩下2道medium没有做出来(我记得以前是medium,刚才看了一下,怎么变成hard了?)。那时候我感觉好失落,自己真菜,水平真次,每天还爱装逼,感觉还写什么题解,真是笑掉大牙!刚好前一天的晚上cf也只做出来一道题,我也就2道题的水平,第一道题由于把‘1’写...

weixin_30267691的博客 570

浅析MOS管导通过程及RC吸收电路设计要点

RC吸收电路 米勒电容 MOS导通过程

liangbo1999的博客 2万+

判断两个字符串是否由相同字符组成

【题目描述】 如题:写一个算法来判断两个字符串是否为换位字符串。(换位字符串是指组成字符串的字符相同,但位置不同) 【方法一】 假设为ASCII码字符串,那么可以分配两个256大小的int数组,每个数组用于统计一个字符串各个字符出现的次数,最后,比较这两个int数组,看是否每个元素都相同。 时间复杂度为O(n)。 int IsSame(char* str1, char

suibianshen2012的专栏 5612

国内网络环境下Leaflet加载OpenStreetMap地图的5种替代方案(附可用瓦片地址)

本文针对国内网络环境下Leaflet加载OpenStreetMap地图的常见问题,提供了5种可用的瓦片替代方案,包括OpenStreetMap.fr HOT、OpenStreetMap.de、CartoDB、Stamen和Thunderforest,并附上详细的代码示例和选择建议,帮助开发者解决地图加载问题。

qsc901234的博客 1679

BurpSuite+安卓模拟器双保险:避开真机抓包限制的完整配置指南

本文详细介绍了如何通过BurpSuite与安卓模拟器(如雷电、夜神)协同工作,绕过真机抓包限制的完整配置指南。从环境准备、网络拓扑配置到证书部署和流量分析,提供了一套高效的解决方案,帮助安全测试人员稳定捕获手机数据包,提升测试效率。

Apple的专栏 438

字符串--------如何判断两个字符串是否由相同的字符组成

问题描述:          由相同的字符组成是指两个字符串,字母以及各个字母的个数是相同的,只是顺序不同。如:“aaaabbc”与“abcbaaa”是由相同字符组成。 算法思路: 方法一:排序法,也是最容易想到的方法,将两个字符串转换为字节数组,分别排序后,判断是否相同即可。 package JBString; import java.util.Arrays; public cla...

hd12370的博客 2532

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 733

判断两字符串所包含字符是否完全相同LeetCode中等题

给定string stringA和string stringB,编写程序确认两字符串包含的字符是否完全相同,注意大小写为不同字符,且考虑字符串中的空格,返回一个bool,代表两串是否由一样的字符组成。保证两串的长度都小于等于5000。 测试样例: "This is nowcoder","is This nowcoder" 返回:true "Here you are","Are you here" 返回:false class Same { public: bool checkS

轩玉的博客 840

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 749

UE4_用户控件_6_通过控件蓝图内部变量来修改进度条的值

发现控件类图类的引用和用户控类引用不兼容,修改变量类型。我们需要添加到视口,同时设置输入模式。创建按钮的点击事件,当点击时调用角色的自定义事件clearwidget。可以了,但是没有退出控件,没有鼠标,所以改进一下。

Growthofnotes的博客 1236

比较字符串是否相等

问题 比较两个字符串,是否相等,其判定依据为两个字符串中字符种类和出现其个数相等。如字符串"abbcd"与"acdbb"相等,因为两个字符串'a'、'c'和'd'都出现了一次,'b'出现两次。 解答 #include #include #include #include using namespace std; string StringSort(string src_str){

思考的力量 5306

一根网线,让整个公司断网,二层环路真实事故复盘

那天晚上 23:47,监控告警突然爆了。核心交换机 CPU 100%。ARP 表暴涨。广播流量飙升。业务系统集体超时。5 分钟后,全公司断网。运维群里一句话:“是不是黑客攻击?但老网工都知道,这种现象只有一种可能:二层环路。

网络技术联盟站 346

[字符串算法题]2.判断两个字符串是否由相同的字符组成

问题:判断两个字符串是否由相同的字符组成。如输入:abc cba,输出:true。1.排序法,代码如下:public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s1 = scanner.next(); String s2 = scanner.next()

u014259820的博客 2043

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java 判断两个字符串是否由相同的字符组成 排序算法 空间换时间的方法

判断两个字符串是否由 相同的字符组成 * 1.排序算法:将两个字符串转化为数组,并进行排序,将排序后的数组转化为字符串, * 并进行比较,得出结果 * 2.空间换时间的方法: * (1)额外增加一个count数组,根据ASCII 数组大小为:256 * 用来记录每个字符的个数 * (2)将两个字符串转化为数组 * (3)遍历第一个数组,对第一个数组进行字符数统计,co

迎着风飞翔的IT 860

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【算法】-- 【实现字符串的反转、判断两个字符串是否由相同的字符组成、删除重复的字符、统计字符串由多少个单词、按要求打印数组排列情况、输出字符串所有组合】

01 如何实现字符串的反转 例如:“I love you"反转后"you love I” 思路:第一次对整个字符串中的字符进行反转,然后对每个单词进行反转 public void swap(char [] cArr,int begin,int end){ while (begin<end){ char tmp=cArr[begin]; ...

春来桃花开的博客 785

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

判断两个字符串是否是anagram

所谓 anagram, 就是两个词所用的字母及其个数都是一样的,但是,字母的位置不一样。比如 abcc 和 cbca 就是 anagram. 判断的方法比较简单,先把单个字母(字符)转成整数,然后利用了hashtable+计数器的原理进行判断。 public static boolean anagrams(String a, String b) { if (a.length() !

Yuwen's Hero 1万+

7-22 判断两个字符串是否为变位词 (40分)PTApython

如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy”也互为变位词。 输入格式: 第一行输入第一个字符串,第二行输入第二个字符串。 输出格式: 输出“yes”,表示是互换词,输出“no”,表示不是互换词。 输入样例1: 在这里给出一组输入。例如: Mary arMy 输出样例1 在...

郭川川 2962

Java 判断两个字符串是否由相同的字符组成

问题:由相同的字符组成是指两个字符串,字母以及各个字母的个数是相同的,只是顺序不同。如:“aaaabbc”与“abcbaaa”是由相同字符组成。 方法一:排序法,也是最容易想到的方法,将两个字符串转换为字节数组,分别排序后,判断是否相同即可。 方法二:集合法(空间换时间),利用Map集合key的唯一性,遍地第一个字符串,将字符作为key,字符出现的次数作为value,若遇到重复字符则将va

梧桐雨的专栏 1万+

判断两个字符串是否为变形词

给定两个字符串 str1 和str2,如果两个字符串中出现的字符种类一样,次数也一样**,则互为变形词,实现一个函数判断两个字符串是否互为变形词 例如: str1=“123”,str2=“132”,true; str1=“123”,str2=“1332”,false; /** * 思路:1. 如果其中一个字符串为空或者两个字符串长度不相等,返回 false * ...

Beverly_的博客 403

字符串相关算法

一、概述 字符串的处理几乎无处不在,算法的形式各种各样,各种巧妙的算法都有一个共同的特点-抓住问题的特点,一些智力题目也是,跟蜡烛相关的题很可能会用到蜡烛可以两头同时点燃,跟灯泡相关的,会用到灯开时间长了会发热等各种隐含的特点。推广到字符串,字符串有什么特点? 1. 由固定数目的字符组成 即使加上各种奇形怪状的符号,最大也不会超过256个。0~31及127(共33个)是控制字符或通信专用字符

胜利者的经验并不复杂,那就是寻找人生的关键点,并在关键时刻竭尽全力 5451

第五章 字符串专题 ---------------- 5.6 解题:判断两字符串的字符集是否相同

题目: 判断两字符串的字符集是否相同。实现一个算法,判断两个字符串是否由相同的字符所组成,不用管重复次数。如"abc","abccc",这两个字符串的字符集相同,都由abc组成,返回true。 public class HasSameCharSet { public static void main(String[] args) { System.out.pri...

Curtis’Blog 565

判断两个字符串是否互为变形词

算法思想: 如果两个字符串长度不相同,直接返回false。 如果两个字符串长度相同,那么假设出现字符的编码值在0~255之间。那么,我们申请一个map数组。map[a]=b:代表字符编码a出现了b次。 package 字符串; public class 判断两个字符串是否互为变形词 { public static boolean isDeformation(Stri...

weixin_42214994的博客 205

判断两个字符串是否匹配

原文地址:http://blog.youkuaiyun.com/v_JULY_v/article/details/6347454。同时也向大家推荐这个文章的博主,技术大牛。 如果两个字符串中所含字符的个数和对应的字符都相等,我们说这两个字符串匹配,比如:abcdea,aabcde。则这两个字符串相等。 特别喜欢这个方法,故转到我空间来,以便记录。 #include #include usin

zzran的专栏 4854

“判断两个字符串是否为换位字符串”(python)

题目描述:换位字符串是指组成字符串的字符相同,但位置不同。例如:由于字符串"aaaabbc"与字符串“abcbaaa”就是由相同的字符所组成的,因此他们是换位字符。 分析与解答:在算法设计中,经常会采用空间换时间的方法以降低时间复杂度,即通过增加额外的存储空间来达到优化算法性能的目的。就本题而言,假设字符串中只使用ASCII字符,由于ASCII字符共有256个(对应的编码为0~255),在实现的...

LeoLee 2136

判断两个字符串是否由相同的字符组成

题目:两个给定的字符串是否由相同的字符组成   解答1:将两个字符串排序,然后逐位比较;   解答2:        判断两个字符串中字符的类型和各种类型的数量是否都相同   private boolean areAnagrams(char[] str0, char[] str1){ if(str0 == null &amp;&amp; str1 == null){ ...

iteye_17895的博客 396
上一篇: [算法]求栈中最小元素
下一篇: [算法]删除字符串中重复的字符
陶程
博客等级 码龄12年 360粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值