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
。也就是说,如果letters
是elf
,那么 true 将返回self
,但不返回heartfelt
,这是错误的。您应该查找单个字母,因为顺序并不重要。
对于递归:
-
如果
letters
为空字符串 - 返回 true。你可以说,如果没有限制,任何词都可以。 -
如果
check
为空字符串 - 返回 false。空字符串不包含letters
中的字母(我们已经知道字母不为空(。 -
取
letters
的第一个字母。在check
中寻找它.如果不存在,则返回 false。 -
如果它在那里,则调用相同的方法,但仅传递剩余的
check
和letters
。例如,如果check
selfish
并且letters
elf
,则发现e
存在。返回Xish("slfish","lf")
的结果。这将处理多次出现的情况。您可以通过使用substring
并连接适用的部分来执行此操作。
如果多次出现不是问题,则可以将check
按原样传递到递归的下一级。但是由于它们很重要,我们需要为每个请求的字母删除一个字母,以确保我们不会在下一次出现时再次匹配相同的位置。
标题提到了递归函数,所以我将提出一个递归解决方案。
-
对于校验字符串中的每个字符,将其与字母字符串中的第一个字符进行比较。
-
如果比较的字符是等效的,请从字母字符串中删除第一个字符,并将这两个字符串传递回函数。
-
如果检查字符串完全迭代而没有在字母字符串中找到字符,则返回 false
-
如果字母在任何时候为空,则返回 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);
}
}