力扣-判定是否互为字符重排-java

题目描述
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
在这里插入图片描述
思路
做法是先检查这两个字符串的长度是否一致,如果不一致说明这两个 字符串是不可能相等的直接返回false。如果长度相同,假设出现字符的编码之在0-255之间,因为二进制的值是在0-255,我们可以先定义一个长度为256的数组命名为map,map[a]=[b]代表字符编码为a字符出现了的b次,初始时map[0…256]值都是0,遍历字符串str1,每次统计字符出现的数量,比如遍历到字符‘a’,他的编码是97,然后让map[97]++,map就成了str1中每种字符的词统计表,遍历字符串str2,每遍历到一个字符都在mao中把词频减下来,遍历到字符‘a’,其编码值是97,就令map[97]–,如果减少后的值小于0,就直接返回false,如果遍历完str2,map中的值也没出现负值,则返回true。

1)首先检查两个字符串长度是否一致,若不一致,则直接返回 false。
2)在对 s1 的字符进行遍历的过程中,进行累加过程。
3)在对 s2 的字符进行遍历的过程中,进行削减过程。
4)最后检查字符计数数组里面是不是全为 0 ,如果不是,说明有一个字符。

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        //判断字符串1和字符串2是否为空,字符串1的长度和字符串2的长度是否相等
      if(s1 == null || s2 == null || s1.length() != s2.length()) return false;
      char [] chstr1 = s1.toCharArray();//将字符串1转换为字符数组
      char [] chstr2 = s2.toCharArray();//将字符串2转换为字符数组
      int [] map = new int[256];//定义了一个字符的数组
      for(int i = 0;i< chstr1.length;i++){//遍历字符串1,进行累加
          map[chstr1[i]]++;
      }
      for(int i = 0 ;i < chstr2.length;i++){//遍历字符串2,进行自减
          if(map[chstr2[i]]-- == 0){//如果减少的值为0,直接返回false
              return false;
          }
      } 
    return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值