1 package code;
2
3 import java.util.Scanner;
4
5 /*20190730判断两个字符串是否互为变形词
6 * 输入:A B 两个字符串
7 * 输出:true 或者 false
8 * 思路:使用遍历法,先统计A中各元素的数量,将出现的字符和字符的次数
9 * 保存在map[0:255], 然后再遍历B,如果遍历到了 某个字符,
10 * 则使该元素出现的次数减1,如果减少之后的值为负,则返回false
11 * 遍历完了没出现负数,则返回true
12 *
13 * 定义域:A与B长度不相等,或者其中一个数组为空
14 *
15 * */
16 public class Problem_01_IsDeformation {
17
18 public static boolean isDeformation(String str1, String str2) {
19 if (str1 == null || str2 == null || str1.length() != str2.length())
20 {
21 return false;
22 }
23 char[] chars1 = str1.toCharArray();
24 char[] chars2 = str2.toCharArray();
25 int[] map = new int [256]; //申请一个长度为256的空数组
26 for (int i = 0; i<chars1.length; i++) {
27 map[chars1[i]]++; //map[]中,第i个元素的值的出现次数+1
28 }
29 for (int i = 0; i<chars2.length; i++) {
30 if (map[chars2[i]]-- == 0) {
31 return false;
32 }
33 }
34 return true ;
35 }
36
37 public static void main(String[] args) {
38 // TODO Auto-generated method stub
39 // Scanner sc1 = new Scanner(System.in);
40 // Scanner sc2 = new Scanner(System.in);
41 // while(sc1.hasNext()) {
42 // String str1 = sc1.next();
43 // System.out.println("输入的第一个字符串" + str1);
44 // }
45 // while(sc2.hasNext()) {
46 // String str2 = sc2.next();
47 // System.out.println("输入的第二个字符串" + str2);
48 // }
49 String A = "abcabcabc";
50 String B = "bcacbaacb";
51 System.out.println(isDeformation(A, B));
52
53 }
54
55 }