/**
* 题目:
* 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
* 这里规定大小写为不同字符,且考虑字符串重点空格。
* 给定一个string stringA和一个string stringB,
* 请返回一个boolean,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。
* 测试样例:
* "This is nowcoder", "is This nowcoder" 返回:true
* "Here you are", "Are you here" 返回:false
* */
/**
* 解题思路:
* 先判断大小是否相同。不同则直接返回false
* 相同,则使用两个大小为256的散列表,通过一次遍历找到每一个字符出现的次数
* 再遍历hashTable来判断每一个字符出现的次数是否相同。一旦某个字符出现不同次数
* 直接返回false 全部相同返回true
* */
public class SameString {
public boolean checkSame(String stringA, String stringB) {
//保证两串的长度都小于等于5000
if(stringA.length() > 5000 || stringB.length() > 5000)
return false;
int lenA = stringA.length();
int lenB = stringB.length();
//先判断大小是否相同。不同则直接返回false
if(lenA!=lenB)
return false;
//相同,则使用两个大小为256的散列表,通过一次遍历找到每一个字符出现的次数
int[] strA = new int[256];
int[] strB = new int[256];
for(int i=0; i<lenA; i++){
strA[stringA.charAt(i)]++;
strB[stringB.charAt(i)]++;
}
//再遍历hashTable来判断每一个字符出现的次数是否相同。
//一旦某个字符出现不同次数,直接返回false,全部相同返回true
for(int j=0; j<256; j++){
if(strA[j]!=strB[j]){
return false;
}
}
return true;
}
public static void main(String[] args) {
SameString same = new SameString();
String stringA = "Are you here";
String stringB = "Here you are";
boolean f = same.checkSame(stringA, stringB);
System.out.println(f);
}
}
/**
* 输出:
* false
* */
判断字符串重排后是否相同(区分大小写)
最新推荐文章于 2023-11-07 08:13:45 发布