使用递归方法确定单词是否为精灵式的单词


public static boolean Xish

此方法应按以下顺序接受两个参数:要检查的单词的字符串和由要检查的字母组成的字符串。例如,如果一个单词包含字母 e、l 和 f,则它被认为是精灵式的,(“waffle”, “rainleaf”)并且该方法的真正返回将是Xish(“waffle”, ”elf”)。如果要检查的字母多次出现,则必须在搜索词中多次出现。如果单词包含所有需要的字符,则返回 true;如果不包含所有字符,则返回 false。

这就是我到目前为止所拥有的,但我不知道如何回忆该方法并检查是否有多次出现(第 2 部分(。

public static boolean Xish(String check, String letters) {
String word = check;
String contains= letters;
if(word.indexOf(contains) >= 0)
return true;
else
return false;
}

实际上,递归执行此操作也可以解决多次出现的问题。

首先,你自己的方法并不真正正确 - 它在单词中寻找整个letters。也就是说,如果letterself,那么 true 将返回self,但不返回heartfelt,这是错误的。您应该查找单个字母,因为顺序并不重要。

对于递归:

  1. 如果letters为空字符串 - 返回 true。你可以说,如果没有限制,任何词都可以。

  2. 如果check为空字符串 - 返回 false。空字符串不包含letters中的字母(我们已经知道字母不为空(。

  3. letters的第一个字母。在check中寻找它.如果不存在,则返回 false。

  4. 如果它在那里,则调用相同的方法,但仅传递剩余的checkletters。例如,如果checkselfish并且letterself,则发现e存在。返回Xish("slfish","lf")的结果。这将处理多次出现的情况。您可以通过使用substring并连接适用的部分来执行此操作。

如果多次出现不是问题,则可以将check按原样传递到递归的下一级。但是由于它们很重要,我们需要为每个请求的字母删除一个字母,以确保我们不会在下一次出现时再次匹配相同的位置。

标题提到了递归函数,所以我将提出一个递归解决方案。

  1. 对于校验字符串中的每个字符,将其与字母字符串中的第一个字符进行比较。

  2. 如果比较的字符是等效的,请从字母字符串中删除第一个字符,并将这两个字符串传递回函数。

  3. 如果检查字符串完全迭代而没有在字母字符串中找到字符,则返回 false

  4. 如果字母在任何时候为空,则返回 true

这是一种蛮力方法,还有其他几种方法可以完成您正在寻找的内容。也许想想如何一次检查检查字符串中的每个字符?

public static boolean Xish(String check, String letters) {
boolean ish = true;
String word = check;
char[] contains= letters.toCharArray();
for(int i = 0; i < contains.length; i++){
if(word.indexOf(contains[i]) < 0){
ish = false;
}else {
StringBuilder sb = new StringBuilder(word);
sb.deleteCharAt(word.indexOf(contains[i]));
word = sb.toString();
// System.out.println(word);
}
}
return ish;
}

这可能是一种方式,但它不是递归的。 Xish("Waffle","elff"(返回true,但是 Xish("Waffle","elfff"(返回false。

不确定它是否 100 %解决了您的问题。但我尝试了一种递归方法。看看这是否有帮助。

包装公司;

公共类 自私 {

public static void main(String args[]) {
String check = "waffle";
String letters = "elf"; // "eof"
int xishCount = xish(check, letters, 0);
if(letters.length()== xishCount) {
System.out.println("TRUE");
}else{
System.out.println("FALSE");
}
}

static int xish(String check, String letters, int xishCount) {
if(letters.length() < 1) {
return 0;
}
if(check.contains(letters.substring(0, 1))) {
xishCount = 1;
}
return xishCount + xish(check, letters.substring(1, letters.length()), 0);
}

}

最新更新