我需要创建一个程序,其中用户输入一个字符串和5个字母,程序检查是否可以从这5个字母再次创建字符串,但忽略不能创建字符串的任何字母。< / p>
例如,如果我输入单词“hello”然后我输入5个字母“h”,“e”,“l”,“o”和“p”,我希望程序确保这些字母组成单词“hello”,但忽略任何多余的字母,在这种情况下是“p”。另一个例子,如果我输入单词“apple”然后我输入5个字母“a”,“p”,“l”,“o”和“f”,我希望程序能够识别那些字母不创建单词apple并忽略字母“o”和“f”。
如果程序确实可以验证字符串是否可以从这5个字母创建,而忽略任何额外的字符,那么它将输出“You win!”,但如果没有,它将输出“You lose!”。这是我到目前为止的代码:
public static void main(String[] args) {
Scanner keyboard = new Scanner (System.in);
System.out.print("Please enter a word: ");
String in = keyboard.nextLine();
System.out.print("Please enter the first letter: ");
String letter1 = keyboard.next();
System.out.print("Please enter the second letter: ");
String letter2 = keyboard.next();
System.out.print("Please enter the third letter: ");
String letter3 = keyboard.next();
System.out.print("Please enter the fourth letter: ");
String letter4 = keyboard.next();
System.out.print("Please enter the fifth letter: ");
String letter5 = keyboard.next();
if (in.contains(letter1 + letter2 + letter3 + letter4 + letter5)) {
System.out.println("You win!");
} else {
System.out.println("You lose!");
}
}
这是我运行时得到的输出:
我是Java的新手,所以我不知道是否有某种代码可以用来做这件事。如果有人知道,请引导我朝正确的方向前进。
答案 0 :(得分:3)
我能想到的最简单的算法是:对于输入的每个字符,从字符串中删除所有出现的字符。最后,检查字符串是否为空。或者在代码中:
char[] cs = new char[] {'h', 'e', 'l', 'o', 'p'};
String s = "hello";
for (char c : cs) s = s.replace(c+"", "");
if (s.isEmpty()) System.out.println("You win!");
请注意,此方法效果不佳。对于给定数量的字符n
和字符串长度m
,其执行为O(n*m)
。它还会进行大量昂贵的String
重新分配。
答案 1 :(得分:0)
语句letter1 + letter2 + letter3 + letter4 + letter5
连接字符串。如果将结果存储在变量中,则该变量将等于字符串helop
。
我会在某种Collection
中存储1-5个字母,然后使用charAt
检查每个字符是否在该集合中。还有其他更有效的方法来解决你的问题,但我认为这是最清楚的。