Как проверить, хорошо ли слово (Java) - PullRequest
0 голосов
/ 27 апреля 2018

Определение Ниццы, как показано ниже

Слово хорошо, если оно содержит ту же строку, что и правильный префикс, а также надлежащий суффикс. Правильный префикс или суффикс не может быть длинным, как само слово. Например:- Манама хороша, потому что она содержит ма в качестве правильного префикса, а также правильного суффикса. Так что вывод будет «СЛАВНЫЙ»

Панама не хорошее слово. Выход в этом случае будет "НЕ"

Мое решение работает нормально, но оно занимает слишком много времени для некоторых тестовых случаев, когда длина ввода (слова) велика.

public static String findNice(String word)  {
    if((word == null) || (word.length()==1))
        return "NOT";
    char[] charArr = word.toCharArray();
    //System.out.println(charArr.length);
    boolean flag = false;
    for(int i = (charArr.length)/2; i < charArr.length ;++i)    {
        if(charArr[0] == charArr[i])    {
            flag  = compareSubString(charArr,0,i);              
        }
    }
    if(flag)
        return "NICE";
    return "NOT";
}
public static boolean compareSubString(char[] seq, int ptr1, int ptr2)  {
    boolean flag = true;
    for(int i = ptr1,j = ptr2 ; j < seq.length  ;++i,++j)   {
        if(seq[i] != seq[j])    {
            flag = false;
        }
    }
    return flag;
}

Как еще улучшить.

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вы можете попробовать это, чтобы избежать двух для цикла

public static String findNice(String word) {
    int length = word.length();
    int haftLength = length / 2;
    for (int i = 0; i <= haftLength; i++) {
        if(getFirstWordByIndex(word, i).equalsIgnoreCase(getLastWordByIndex(word, i, length))) {
            return "NICE";
        }
    }
    return "NOT";
}

public static String getFirstWordByIndex(String str, int index) {
    return str.substring(0, index + 1);
}

public static String getLastWordByIndex(String str, int index, int length) {
    return str.substring(length - index-1, length);
}
0 голосов
/ 27 апреля 2018

Более короткая и удобочитаемая опция: String.endswith

public static String findNice(String word)  {
    String result = "NOT";
    for(int i = 0; i<word.length()/2;i++){
        String prefix = word.substring(0, i+1);
        if(word.endsWith(prefix)){
            result = "NICE! Prefix = "+prefix;
        }            
    }
    return result;
}
0 голосов
/ 27 апреля 2018

Попробуйте добавить оператор разрыва, как показано ниже: -

        if(seq[i] != seq[j])    {
            flag = false;
            break;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...