题
如果满足以下两个条件,我们认为单词w是美丽的:
没有两个连续的字符是相同的。
以下元音集中没有两个连续的字符:a,e,i,o,u,y。请注意,我们认为y是此挑战中的元音。
例如:
弦蝙蝠侠之所以美丽,是因为它满足给定的条件。但是,苹果有两个连续出现的相同字母(pp),而美有三个连续的元音(eau),因此这些单词并不漂亮。
我的问题是,当我给输入字符串“是”时,它会打印“是”,但应打印“否”。
当我使用Intellij调试代码时,我看到了
它正在执行返回语句之后的代码,但是返回语句用于将控制权转移到主函数。
解
public class Coding {
int count = 0;
public static void main(String[] args) {
Coding obj = new Coding();
Scanner in = new Scanner(System.in);
String w = in .next();
boolean b = true;
char[] c = w.toCharArray();
for (int i = 0; i < c.length - 2; i++) {
b = obj.check(i, c); //recursive function
if (c[i] == c[i + 1]) {
b = false;
break;
}
if (!b) {
System.out.println("No");
break;
}
}
if (c[c.length - 2] == c[c.length - 1]) //check.for.the.remaining.chars
System.out.println("No");
else if (b) {
System.out.println("Yes");
}
}
public boolean check(int i, char[] c) {
if (c[i] == 'a' || c[i] == 'e' || c[i] == 'i' || c[i] == 'o' || c[i] == 'u' || c[i] == 'y') {
count++;
if (count == 2) {
return false; // code following this statement are executing
}
check(i + 1, c);
}
count = 0;
return true;
}
}
最佳答案
您正在进行递归调用,但是您忽略了该调用的结果!
那没有道理。该调用是有效的,那么您应该返回返回的任何内容。或递归不“属于”那里,那么您应该重新设计完整的方法!
除此之外:尽管递归解决方案通常看起来很优雅,但这些比赛都集中在最佳性能上。含义:宁可使用单个循环来迭代该字符串一次。
关于java - 美丽的词:Hackerrank,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43405132/