Вы должны продолжить запись псевдокода программы. И из кода, который вы опубликовали, к тому, что я понимаю, вам не нужно преобразовывать ввод в нижний регистр. Это изменит все на нижний регистр, и вы не сможете использовать эти значения.
Я бы запускал цикл for
из конца массива символов и проверял каждую последовательную пару значений, если они равны или нет. Поскольку цикл выполняется с конца, первый экземпляр совпадения возвращает значение i
. Обратный подход эффективен, так как вы ищете последний матч. Метод также использует только один if-conditional, поэтому в конечном итоге объем памяти будет меньше.
private static int getStringMatchNumber(String input) {
char[] str = input.toCharArray();
for(int i = str.length-1; i > 0; i--) {
Character c = str[i];
Character p = str[i-1];
if (Character.isLowerCase(c) && Character.isUpperCase(p)){
if (p == Character.toUpperCase(c))
return i;
}
}
return 0;
}
Обратите внимание, что если функция возвращает 0, это означает, что не найдено совпадающих пар. Вы можете проверить это после вызова.
EDIT Я внедрил проверку для строчных и прописных букв в соответствующих элементах (как это было предложено другими). Имейте в виду, что возвращаемое значение - это значение zero-based
позиции символа с нижним очерком в матче. Для входного значения "aaaBbaa"
возвращается значение 4
, то есть позиция b
в матче Bb
. Вы можете настроить алгоритм, чтобы вернуть позицию B
, вернув i-1
вместо i
. В этом случае вам нужно будет вернуть -1
вместо 0
, чтобы избежать ложных негативов.
Вы должны начать цикл, начиная с конца, и искать совпадение. Используйте 'for',' if' и соответствующий метод java.lang.Character. Прочтите его javadoc, чтобы узнать соответствующий метод. –