Java为给定的2个字符串编写一个方法,以确定一个字符串是否是另一个字符串的置换

Java为给定的2个字符串编写一个方法,以确定一个字符串是否是另一个字符串的置换,java,permutation,Java,Permutation,这是破解编码面试中的一个问题。下面是我的代码: class PalinDrome { public static Scanner userinput = new Scanner(System.in); public static void main(String [] args){ //1st input from user System.out.println("Enter 1st string: "); String s1=

这是破解编码面试中的一个问题。下面是我的代码:

class PalinDrome {

    public static Scanner userinput = new Scanner(System.in);
    public static void main(String [] args){

        //1st input from user
        System.out.println("Enter 1st string: ");
        String s1= userinput.next().toLowerCase();

        // convert 1st string to char Array

        char [] charS1= s1.toCharArray();

        System.out.println(charS1);

        //2nd input from user
        System.out.println("Enter 2nd string: ");
        String s2= userinput.next().toLowerCase();

        // convert 2nd string to char Array

        char [] charS2= s2.toCharArray();

        System.out.println(charS2);

        if(s1.length()==s2.length() && s1.toCharArray()==s2.toCharArray()){
            System.out.println(" Word 2 is Perm of 1st word");
        }
        else{
            System.out.println(" Word 2 is not Perm of 1st word");
        }


    }
}

问题:当我使用Tom1st和Second Mot/Mot尝试不同的变体时,我总是不会烫到第一个单词。书中有答案,我想知道这个逻辑有什么问题。先谢谢你

如注释s1中所述。toCharArray==s2。toCharArray是错误的,因为您并没有真正比较数组中的值,只是比较这两个新创建的数组的引用。 您应该对这些数组进行排序
然后使用来比较这些数组。

这里是一个使用收集还是排序的解决方案^^

其思想是在两个字符串/字符数组中标记相同字符的条目,直到所有内容都被标记。在检查相同长度的字符串之后

    package PermuteString;

public class Permutation {

public static void main(String[] args) {

    String a = "yalla";

    String b = "allay";

    String c = "allas";

    Permutation permutation = new Permutation();

    if (permutation.isPermutationWithoutCollection(a, b))
        System.out.println(a + " is permutation of " + b);

    if (!permutation.isPermutationWithoutCollection(a, c))
        System.out.println(a + " is not a permutation of " + c);

}

public boolean isPermutationWithoutCollection(String string1, String string2) {

    if (string1.length() != string2.length()) {
        return false;
    }

    char[] a = string1.toLowerCase().toCharArray();

    char[] b = string2.toLowerCase().toCharArray();

    for (int i = 0; i < a.length; i++) {

        boolean unChanged = true;

        for (int k = 0; k < b.length; k++) {

            if (a[i] == b[k]) {
                a[i] = 'A';
                b[k] = 'B';
                unChanged = false;
                break;
            }

        }

        if (unChanged) {
            //System.out.println("wawawa");
            return false;
        }
    }

    return true;
}

}
收益率:

雅拉是安莱的排列

雅拉不是阿拉斯的排列


这取决于面试基于什么主题,使用java/基于算法。

排列还是回文?它们有些不同。你认为为什么将字符串作为字符数组进行比较会神奇地发现它们是否包含相同的字符,而不管顺序如何?Perm,我没有更改类名,保留了这一部分,避免了我所做的另一个问题。