java - 给定一个输入中的两个字符串(用逗号分隔),如何在 Java 中找出字符串 S1 的排列是否等于字符串 S2?

标签 java arrays string sorting java-io

输入 - “sumit mitsu”

如何查找字符串中任何一个的排列是否与另一个匹配。请在下面找到我的尝试代码,如果我的方法正确,请帮助我。我还尝试使用 Arrays.sort 对字符串进行排序,但 hackerEarth 编辑器不接受 Arrays.sort。还有其他方法可以解决这个问题吗? TIA。

注意 - 这是一个 hackerEarth 两个字符串问题。

我已将输入拆分为两个字符串数组。然后我将每个关键字转换为字符数组。通过 for 循环,我遍历了 S1 中的每个关键字以与 S2 数组匹配。

class TestClass {
public static void main(String args[] ) throws Exception {

    Scanner s = new Scanner(System.in);
    int cases=s.nextInt();

    for(int i=0;i<cases;i++){   //for multiple lines


        String name1=s.nextLine();
        String name2=s.nextLine();

        char[] n1=name1.toCharArray();
        char[] n2=name2.toCharArray();

        boolean match=false;

            for(int j=0;j<n1.length;j++){

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

                    if(n1[j]==n2[k]){
                        match=true;
                        break;
                    }
                    else{
                        match=false;
                    }

                }
            }
        System.out.println(match);
    }
  }
}

输入 - majnu jamnu

预期 - 正确 实际 - 错误

最佳答案

您的代码存在多个问题:

  1. 您可能在读取输入时遇到问题。如果您对测试的输入进行硬编码(即 String name1="majnu"; String name2="jamnu";),您的程序将输出 true。如果您尝试使用 nextLine() 读取每个 String,即使它们是在同一行中输入的,这也不足为奇。

  2. 您无需考虑同一字符多次出现的情况。您的程序将为 abbbbbaa 返回 true

  3. 您的程序具有二次(即 O(n^2))时间复杂度。如果您维护一个 HashMap 来计算第一个单词中每个字符的出现次数,并根据该 Map 检查第二个单词,则可以以线性复杂度完成此操作。

关于java - 给定一个输入中的两个字符串(用逗号分隔),如何在 Java 中找出字符串 S1 的排列是否等于字符串 S2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56206301/

相关文章:

java - 如何从java代码设置环境变量并使用该变量而不重新启动我的工作区

java - Tomcat 7 TagLib 和用户问题

java - Spring Scheduled fixedRate 无法正常工作

java - 为什么Java不提供标准函数来反转数组?

用于 Guava 不可变集合的 Java 8 收集器?

python - 在 numpy 结构化数组列上执行 math.sqrt

java - 在 Java 数组中设置值返回错误

java - 用其他多个字符替换Java中的多个字符?

c# - 在 C# 中将字符串拆分为两个字符

python - 使用 Pandas 删除/替换行中的字符后替换数据帧值