美丽的词语:Hackerrank

时间:2017-04-14 04:18:07

标签: java

问题 如果满足以下两个条件,我们认为w这个词是美丽的:

没有两个连续的字符是相同的。 以下元音集中没有两个连续的字符:a,e,i,o,u,y。请注意,我们认为y是这个挑战中的元音。
例如:

弦蝙蝠侠是美丽的,因为它满足给定的标准;然而,苹果连续两次出现同一个字母(pp),而且连续三个元音(eau),所以这些单词并不美观。

我的问题当我输入字符串“是”时,它会打印但是应该打印

当我使用Intellij调试代码时,我看到了 它正在执行过去return语句的代码,但return语句用于将控制转移到main函数。

解决方案

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;
}

}

2 个答案:

答案 0 :(得分:0)

您正在进行递归通话,但是您忽略了该通话的结果!

这没有意义。要么该呼叫有效,那么你应该返回任何回复。或者递归不属于&#34;在那里,你应该重做完整的方法!

除此之外:虽然递归解决方案通常看起来很优雅,但这些竞赛关注的是最佳性能。含义:而是使用单个循环来迭代该字符串一次

答案 1 :(得分:0)

提示:问题似乎与方法count有关。它总是返回truemain方法。如果任何递归调用返回false,它是否会传播回main方法?