博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串5:词语变形练习题
阅读量:3731 次
发布时间:2019-05-22

本文共 1223 字,大约阅读时间需要 4 分钟。

题目:对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。

给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。

测试样例:"abc",3,"bca",3返回:true

思路:所谓变形词是指这个字符串中出现的元素的种类相同,且每个元素的次数相同,例如都是a出现2次,b出现0次,c出现3次……显然需要统计两个字符串中每个字符的出现次数,显然可以使用hash表来实现,hash表是抽象的数据结构,具体实现时是使用数组来实现的,数组需要定长,因此需要先确定数组的长度,如何确定哈希表数组的长度?首先明确要统计出现次数的是谁?是字符。可能出现的字符范围是什么?是abc……ABC……+—*&¥……12345……【{‘;:?/……等各种字符对应的ascii码是0~127共128个,注意一个常识:标准ascii码使用7位表达128中字符,但是在扩展ascii码中后128个字符用于表达附加字符,因此总是使用8位来表达所有字符,即无论在Java还是c/c++中,字符都有256中可能性。

因此由于字符有0~255共256个值,因此在建立哈希表对应的数组时数组大小为256,然后遍历祖父数组,对每一个字符,使用字符的ascii值计算得到的key作为哈希表数组的下标去哈希表中按照下标找对应的位置,先遍历String1,每个元素+1,然后遍历String2,对每个元素-1,每次-1之后就检验是否<0如果小于0显然表示String2中该字符多余String1中的该字符,于是返回false即可。当最后遍历完String2后再遍历哈希表,看每个位置是否为0,如果不为0则返回false。这个步骤其实可以省略,因为已经保证了长度相等,所以如果String1中某个字符多于String2,那么String2中必然会有字符多于String1,此时必然在-1运算时出现<0的情况而导致提前结束判断。

import java.util.*;public class Transform {    public boolean chkTransform(String A, int lena, String B, int lenb) {        if(A==null || B==null || A.length()!=B.length()){            return false;        }        //将字符串转化为数组进行处理        char[] char1=A.toCharArray();        char[] char2=B.toCharArray();                int[] array=new int[256];                for(int i=0;i

转载地址:http://dtzin.baihongyu.com/

你可能感兴趣的文章
ETL工具Sqoop的入门学习(二)之eval语句使用以及import的增量导入。
查看>>
Java实现AES数据对称加密和解密算法!
查看>>
Python可视化各省近20年地区生产总值数据
查看>>
Python pandas库的Series与DataFrame常用命令详细讲解!
查看>>
python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!
查看>>
Java实现二叉查找树的前中后序遍历
查看>>
Springboot整合mybatis笔记
查看>>
Springboot整合mybatis访问数据并将读取的数据发送到前端通过echarts绘图展示。
查看>>
Springboot开发一个简单的可视化系统的总结!
查看>>
java实现数据元素间的排序之冒泡排序算法。
查看>>
java数组实现针对一个有序的数组插入一个数据并保持数组有序。
查看>>
java实现根据名单进行随机的小组分组。
查看>>
Java实现简单的数字拆分。题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
查看>>
Java 单链表的指定添加、删除数据的详细实现
查看>>
Java 双链表的指定添加、删除数据的详细实现
查看>>
Java双链表实现左旋转字符串
查看>>
Java Swing Jtable组件展示从MySQL数据库中获取到的的数据,可点击按钮查询数据并展示。
查看>>
电脑组合键无法调节亮度及其解决方法
查看>>
内网安全-ew工具使用之端口转发
查看>>
SpringMVC实现原理和SpringBootMVC实现原理
查看>>