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 }