leetcode 01.02:判定是否互为字符串重排

Posted 枫叶艾辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 01.02:判定是否互为字符串重排相关的知识,希望对你有一定的参考价值。

import java.util.HashMap;
import java.util.Map;

/**
 * @Class CheckPermutation
 * @Description 
 * 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
 * <p>
 * 示例 1:
 * 输入: s1 = "abc", s2 = "bca"
 * 输出: true
 * <p>
 * 示例 2:
 * 输入: s1 = "abc", s2 = "bad"
 * 输出: false
 * 说明:
 * 0 <= len(s1) <= 100
 * 0 <= len(s2) <= 100
 * @Author 
 * @Date 2020/6/23
 **/
public class CheckPermutation {
}
public static boolean checkPermutation(String s1, String s2) {
	if (s1.length() != s2.length()) {
		return false;
	}

    // 利用键值对,保存每个字符出现的次数,然后对比s2中相同字符出现的次数是否相等
	Map<Character, Integer> map = new HashMap<>();
	for (int i = 0; i < s1.length(); i++) {
		char ch = s1.charAt(i);
		if (map.containsKey(ch)) {
			int temp = map.get(ch).intValue();
			temp++;
			map.put(ch, temp);
		} else {
			map.put(ch, 1);
		}
	}

	for (int i = 0; i < s2.length(); i++) {
		char ch = s2.charAt(i);
		if (!map.containsKey(ch)) {
			return false;
		} else {
			int temp = map.get(ch);
			if (temp <= 0) return false;

			temp--;
			map.put(ch, temp);
		}
	}
	return true;
}
// 测试用例
public static void main(String[] args) {
	String s1 = "abc", s2 = "bca";
	boolean ans = checkPermutation(s1,s2);
	System.out.println("demo01 result:"+ans);

	s1 = "abc";
	s2 = "bad";        
	ans = checkPermutation(s1,s2);
	System.out.println("demo02 result:"+ans);

	s1 = "asvnpzurz";
	s2 = "urzsapzvn";
	ans = checkPermutation(s1,s2);
	System.out.println("demo03 result:"+ans);
}

以上是关于leetcode 01.02:判定是否互为字符串重排的主要内容,如果未能解决你的问题,请参考以下文章

面试题 01.02: 判定是否互为字符重排(C++)

字符串程序员面试经典面试题01.02 - 判定是否互为字符重排

面试题 01.02. 判定是否互为字符重排

#yyds干货盘点# LeetCode程序员面试金典:判定是否互为字符重排

算法面试题 01.02. 判定是否互为字符重排

JAVA判定是否互为字符重排