使用递归比较字符串中包含的字母?
接受两个单词后,利用递归确定第一个单词的字母是否包含在第二个单词的任意顺序中。使用递归比较字符串中包含的字母?
我们只能使用.charAt字符串方法,而且.contains也是不允许的。
我在考虑从第一个单词的第一个字符开始,看它是否等于第二个单词-1的长度charAt,然后返回一个长度为-1的子字符串,但这不能正常工作。
public static boolean containedWordsCheck(String firstWord,String secondWord) {
//Recursion
if (firstWord.charAt(0) == secondWord.charAt(secondWord.length()-1))
return containedWordsCheck(firstWord.substring(1, firstWord.length()-1),secondWord.substring(1, secondWord.length() - 1));
//If it reaches this far it means the letters in the first string aren't contained in the second string
return false;
import java.util.Arrays;
public class FunLetters {
public static void main(String[] args) {
String a = "apple";
String b = "pplea";
char[] aArr = a.toCharArray();
Arrays.sort(aArr);
char[] bArr = b.toCharArray();
Arrays.sort(bArr);
boolean answer = checkForSameString(aArr, bArr, 0);
System.out.println(answer);
}
private static boolean checkForSameString(char[] a, char[] b, int i) {
if (i == a.length || i == b.length)
return true;
if (a[i] == b[i])
return checkForSameString(a, b, i + 1);
return false;
}
当同一个单词重新排列时,这种方式可以工作 – user121290
这样的事情应该工作。它正在使用助手递归函数,并且只有您提出的charAt()。复杂性将是O(n^2)。如果你做了预先排序,它会更容易,你可以在其他答案中看到。
public boolean containedWordsCheck(String firstWord,String secondWord) {
if (firstWord.isEmpty()) {
return true;
}
if (containChar(secondWord, firstWord.charAt(0))) {
return true && containedWordsCheck(firstWord.substring(1, firstWord.length()), secondWord);
} else {
return false;
}
}
public boolean containChar(String word, char ch) {
if (word.isEmpty()) {
return false;
}
if (word.charAt(0) == ch) {
return true || containChar(word.substring(1, word.length()), ch);
} else {
return containChar(word.substring(1, word.length()), ch);
}
}
一方面,这是勺子喂养,可能不是帮助提问者的最佳方式。另一方面,这个想法是完全正确的。 –
@ Ole V.V.你是对的,下次我会更加小心;)。 –
如果第一个单词是“apple”,那么在第二个单词中是否必须有两个p? – ajb
如果第二个单词中的字符可以是任意顺序**,那么您的逻辑将失败,因为您将第一个单词中的第一个字符与第二个单词中的_last_字符进行比较,而不是第二个单词中的任何其他字符第二个字。 “以任何顺序”意味着角色可以在第二个单词中的任何地方,对吗?你的逻辑还有其他的错误,但你仍然需要制定一个更好的计划。 – ajb
你已经学过循环了吗? – user3707125