使用基本Java检查两个字符串是否是彼此的字谜
我正在用JavaNetbeans编写以下代码,这对于普通的字谜来说非常有效。但是,如果这两个文本字段包含包含重复字母的单词,那么代码将无法工作。可能有什么问题,我如何解决?我对Java非常熟悉,还不能理解数组
String s1= t1.getText();
String s2= t2.getText();
int b=0,c=0;
if(s1.length()!=s2.length())
System.out.print("No");
else {
for(int i=0;i<s1.length();i++) {
char s = s1.charAt(i);
for(int j=0;j<s2.length();j++) {
if(s==s2.charAt(j)){
b++;
}
}
if(b==0)
break;
}
if(b==0)
System.out.print("No");
else
System.out.print("YES");
}
System.out.print(b);
# 1 楼答案
您想要比较排序的字符。这是一条单行线:
Arrays.equals()
为您比较长度和所有元素# 2 楼答案
因为您似乎是一个初学者,这里有一个解决方案,它不涉及来自其他类或流的函数。它只涉及数组的使用以及
char
也可以表示int
的事实# 3 楼答案
这里是我的解决方案,我们计算第一个字符串中每个字符的外观,然后从第二个字符串的计数中减去它。最后,检查字符计数是否不是0,则两个字符串不是字谜
# 4 楼答案
基于发生计数器的另一种解决方案:
虽然此解决方案不如“排序和比较”优雅,但它可能更有效地处理长字符串,因为它在O(n)而不是O(n logn)中运行,并且在第二个字符串的某个位置未找到匹配项时立即返回
走出“基本Java”领域,我修改了算法来处理surrogate pairs。这里收集和匹配的不是
char
码,而是int
码点:# 5 楼答案
我想用更简单的理由来解释:两个字符串如果排序后完全匹配,那么它们就是字谜。 因此,在Java中,它类似于: