我需要检查两个字符串是否是字谜但我不能使用arrays.sort ...我知道我必须使用for循环但我不知道如何启动以便chararray按字母顺序排序。求你帮帮我。
import java.util.Scanner;
public class Assignement3{
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println( "Please, type the first word: ");
String word1=sc.nextLine();
System.out.println( "Please, type the second word: ");
String word2=sc.nextLine();
String word1lower=word1.toLowerCase().replace(" ","");
String word2lower=word2.toLowerCase().replace(" ","");
System.out.println("Your First word is: " + word1lower);
System.out.println("Your Second word is: " + word2lower);
char[] firstword=word1lower.toCharArray();
char[] secondword=word2lower.toCharArray();
}
}`
答案 0 :(得分:1)
我认为提供确定两个字符串是否有意义的或彼此的实际字谜的代码需要在字典中进行查找。但是,如果我们将单词的字谜定义为原始单词中现有字符的一些排列,那么我们可以相当容易地检查这一点。
在下面的代码片段中,我将第一个单词中的字符读入地图,并记录每个字母的出现次数。这个字符图表示可用于形成潜在字谜的所有内容。通过迭代第二个单词并跟踪消耗的每个字符,我们可以判断第二个单词是否是字谜。失败的标记将试图使用一个没有出现或已经用尽的角色。否则,第二个词是潜在的字谜。
String word1lower = "hala babel";
String word2lower = "baha label";
char[] firstword = word1lower.toCharArray();
char[] secondword = word2lower.toCharArray();
Map<Character, Integer> m1 = new HashMap<>();
int count = 0;
for (char c : firstword) {
Integer cnt = m1.get(c);
m1.put(c, cnt == null ? 1 : cnt.intValue() + 1);
++count;
}
boolean isAnagram = true;
for (char c : secondword) {
Integer cnt = m1.get(c);
if (cnt == null || cnt.intValue() == 0) {
isAnagram = false;
break;
}
m1.put(c, cnt.intValue() - 1);
--count;
}
if (isAnagram && count == 0) {
System.out.println("Second word is a full anagram of the first word.");
}
else if (isAnagram) {
System.out.println("Second word is a partial anagram of the first word.");
}
else {
System.out.println("Second word is not an anagram of the first word.");
}
同样,我在这里说潜在的字谜,因为要检查字符的随机组合是否对应于实际的英语(或其他语言)字词需要字典。这超出了单个Stack Overflow问题的范围,但希望我的回答可以帮助您思考正确的方向。
在这里演示: