我正在解决这个问题作为学校的任务.但是当我提交代码时,我的两个测试用例出错了?我不知道出了什么问题.我检查了各种其他测试案例和角落案例,一切正确.
这是我的代码:
public static boolean isPermutation(String input1, String input2) {
if(input1.length() != input2.length())
{
return false;
}
int index1 =0;
int index2 =0;
int count=0;
while(index2<input2.length())
{
while(index1<input1.length())
{
if( input1.charAt(index1)==input2.charAt(index2) )
{
index1=0;
count++;
break;
}
index1++;
}
index2++;
}
if(count==input1.length())
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
样本输入
abcde
baedc
Run Code Online (Sandbox Code Playgroud)
产量
true
Run Code Online (Sandbox Code Playgroud)
样本输入
abc
cbd
Run Code Online (Sandbox Code Playgroud)
产量
false
Run Code Online (Sandbox Code Playgroud)
一个更简单的解决方案是对两个字符串中的字符进行排序并比较这些字符数组.
String.toCharArray() 返回String中的字符数组Arrays.sort(char \[\]) 排序字符数组Arrays.equals(char \[\], char \[\]) 比较数组例
public static void main(String[] args) {
System.out.println(isPermutation("hello", "olleh"));
System.out.println(isPermutation("hell", "leh"));
System.out.println(isPermutation("world", "wdolr"));
}
private static boolean isPermutation(String a, String b) {
char [] aArray = a.toCharArray();
char [] bArray = b.toCharArray();
Arrays.sort(aArray);
Arrays.sort(bArray);
return Arrays.equals(aArray, bArray);
}
Run Code Online (Sandbox Code Playgroud)
没有排序的更长篇大论的解决方案将检查A中的每个字符也在B中
private static boolean isPermutation(String a, String b) {
char[] aArray = a.toCharArray();
char[] bArray = b.toCharArray();
if (a.length() != b.length()) {
return false;
}
int found = 0;
for (int i = 0; i < aArray.length; i++) {
char eachA = aArray[i];
// check each character in A is found in B
for (int k = 0; k < bArray.length; k++) {
if (eachA == bArray[k]) {
found++;
bArray[k] = '\uFFFF'; // clear so we don't find again
break;
}
}
}
return found == a.length();
}
Run Code Online (Sandbox Code Playgroud)