在一个输入中给定两个字符串(用逗号分隔),如何确定字符串S1的排列是否等于Java中的字符串S2?
输入-“三重相思”在一个输入中给定两个字符串(用逗号分隔),如何确定字符串S1的排列是否等于Java中的字符串S2?,java,arrays,string,sorting,java-io,Java,Arrays,String,Sorting,Java Io,输入-“三重相思” 如何找到字符串中任何一个的排列是否与另一个匹配。请在下面找到我的尝试代码,如果我的方法正确,请帮助我。我还尝试使用Arrays.sort对字符串进行排序,但hackerEarth编辑器不接受Arrays.sort。有没有其他办法解决这个问题?蒂亚 注意-这是一个双字符串问题 我已将输入的两个字符串数组拆分。然后我将每个关键字转换成字符数组。对于for循环,我遍历了S1中的每个关键字以匹配S2数组 class TestClass { public static void ma
如何找到字符串中任何一个的排列是否与另一个匹配。请在下面找到我的尝试代码,如果我的方法正确,请帮助我。我还尝试使用Arrays.sort对字符串进行排序,但hackerEarth编辑器不接受Arrays.sort。有没有其他办法解决这个问题?蒂亚 注意-这是一个双字符串问题 我已将输入的两个字符串数组拆分。然后我将每个关键字转换成字符数组。对于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);
}
}
}
class测试类{
公共静态void main(字符串args[])引发异常{
扫描仪s=新的扫描仪(System.in);
int cases=s.nextInt();
对于(int i=0;i,您的代码存在多个问题:
您可能在读取输入时遇到问题。如果您对测试的输入进行硬编码(即String name1=“majnu”String name2=“jamnu”
),您的程序将输出true
。如果您尝试使用nextLine()读取每个字符串,这并不奇怪
即使它们是在同一行中输入的
您不考虑同一字符的多次出现。对于abbb
和baa
,您的程序将返回true
您的程序具有二次(即O(n^2)
)时间复杂度。如果您维护一个计算第一个单词中每个字符出现次数的HashMap
,并对照该Map
检查第二个单词,则可以使用线性复杂度完成此操作
一行:
*)类似的任务也被完美地描述了
countMap.apply(“majnu”).equals(countMap.apply(“jamnu”));//谢谢你指出这些问题。对于第1点,我必须使用split方法来分割输入并继续。对于第2点,我给出了break;如果它至少匹配一次,就退出循环。如果我错了,请告诉我。第3点-我不知道你提到的复杂性类型,我将了解它并尝试使用Hashmap在这里。@HarishKannan中断对您没有帮助。假设输入是“aaaaaa”和“a”。您将第二个字符串的第一个也是唯一一个字符与第一个字符串的所有字符相匹配,并错误地返回true。是的,这种情况被接受。我正在尝试只找出不匹配的字符。
String s1 = "majnu", s2 = "jamnu";
Arrays.equals( s1.chars().sorted().toArray(), s2.chars().sorted().toArray() ); // <— true
Function<String,Map<Integer, Integer>> countMap = (s) -> s.codePoints().boxed().collect(
Collectors.toMap( Function.identity(), value -> 1, Integer::sum ) );