Question:确定字符串是否是另一个的排列(java)
解一:先获取字符串,然后将字符串通过toCharArray()方法变成字符数组,然后将获取的字符数组用sort()方法进行排序,最后再将字符数组转成新的字符串,再将两个新的字符串进行比较得出结果。

注:比较两个字符串时需用equal()方法,不能用“==”来判断是否相等。

解二:获取字符串,然后将两个字符串用toCharArray()方法转成字符数组,设置一个计数器,用两层循坏遍历两个数组,若数组二下标j的值等于数组一下标i的值则计数器加一,最后统计计数器的值是否与某一数组的长度相等。
注:个人感觉此方法有一个漏洞:就是当出现重复字母时,计数器会重复累计相等的次数,最后导致出现计数器与某一字符串长度不一样而出现错误。(但在蓝桥杯上测试用例全部通过,如有错误,还请大佬多加指正)。下面我给出我认为错误的一个示例:


解三:获取两个字符串,先判断两个字符串长度是否相等,不相等则输出no,提前结束程序。然后建立一个新的长度为60的字符数组,通过遍历某一数组,获取第i位下标下的两个字符串的值,再利用ASIIC码减去字符‘a’变成整型作为下标存入那个新的字符数组中,若字符串一中有该值则加一,若字符串二中有该值则相应减一。最后判断新字符数组中是否存在值不为0,若存在则输出no,否则输出yes。

解四:该方法个人感觉与解法一的思想大差不差,使用了List接口,其特点是有序性、可重复性、动态扩容。

解五(自己的解法):该方法也是比较复杂一点所以放到最后。首先获取两个字符串,创立两个hashmap,先判断两字符串是否长度相等,相等的话继续下一步程序,否则输出no,终止程序。再将字符串分别存入各自的map里,通过map独有的“键-值对”属性,判断字符串2里是否有字符串1 的字符且次数一样,若存在一种不同,则为false,否则为true,最后判断,打印输出。


更多推荐


所有评论(0)