《程序员面试金典》确定两串乱序同构

1、题目描述

  给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。

测试样例:
"This is nowcoder","is This nowcoder"
返回:true
 
"Here you are","Are you here"
返回:false

2、代码实现
 1 import java.util.*;
 2 
 3 public class Same {
 4     public boolean checkSam(String stringA, String stringB) {
 5 
 6         // 先判断大小是否相同,不同则直接返回false。
 7         if(stringA.length() != stringB.length()){
 8             return false;
 9         }
10         
11         // 相同,则使用两个大小为256的散列表,通过一次遍历找到每一个字符出现的次数
12         char a[] = new char[256];
13         char b[] = new char[256];
14         for(int i = 0; i < stringA.length(); i++){
15             a[stringA.charAt(i)]++;
16             b[stringB.charAt(i)]++;
17         }
18         
19         // 再遍历hashTable来判断每一个字符出现的次数是否相同。一旦某个字符出现不同次数,直接返回false  全部相同返回true
20         for(int j = 0; j < 256; j++){
21             if(a[j] != b[j]){
22                 return false;
23             }
24         }
25         
26         return true;
27     }
28     
29     public static void main(String[] args) {
30         Same same = new Same();
31         System.out.println(same.checkSam("Here you are", "are you Here"));
32     }
33 }


 
原文地址:https://www.cnblogs.com/wangchaoyuan/p/5965321.html