难度

简单

标签

数组、字符串

题目描述

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

  1. 输入: s1 = "abc", s2 = "bca"
  2. 输出: true

示例 2:

  1. 输入: s1 = "abc", s2 = "bad"
  2. 输出: false

说明:

  1. 0 <= len(s1) <= 100
  2. 0 <= len(s2) <= 100

题解

1. 使用数组

  1. class Solution {
  2. public boolean CheckPermutation(String s1, String s2) {
  3. if(s1.length() != s2.length()){
  4. return false;
  5. }
  6. int[] sum = new int[58];
  7. for(int i = 0; i < s1.length(); i++){
  8. int index = s1.charAt(i) - 'A';
  9. sum[index]++;
  10. }
  11. for(int i = 0; i < s2.length(); i++){
  12. int index = s2.charAt(i) - 'A';
  13. sum[index]--;
  14. if(sum[index] < 0) {
  15. return false;
  16. }
  17. }
  18. return true;
  19. }
  20. }

2. 使用map

  1. import java.util.HashMap;
  2. class Solution {
  3. public boolean CheckPermutation(String s1, String s2) {
  4. if(s1.length() != s2.length()){
  5. return false;
  6. }
  7. HashMap<Character, Integer> map = new HashMap<>(s1.length() * 4 / 3 + 1);
  8. for(int i = 0; i < s1.length(); i++){
  9. char cur = s1.charAt(i);
  10. if(map.containsKey(cur)) {
  11. map.put(cur, map.get(cur) + 1);
  12. continue;
  13. }
  14. map.put(cur, 1);
  15. }
  16. for(int i = 0; i < s2.length(); i++){
  17. char cur = s2.charAt(i);
  18. if(!map.containsKey(cur) || map.get(cur) <= 0) {
  19. return false;
  20. }
  21. map.put(cur, map.get(cur) - 1);
  22. }
  23. return true;
  24. }
  25. }