Я решал этот набор испытаний на Hackerrank, ссылка: Hackerrank in String
Я создал свой алгоритм, который выглядит следующим образом:
- Чтобы проверить, имеет ли он по крайней мере два a, r и k согласно строке хакерранка
- Проверьте, что он содержит следующие символы h, a, c, k, e, r, n,k
- пусть p [0], p (1), p [2] ....., p [9] - соответствующие индексы h, a, c, k, e, r, rв строке.Если p [0]
Я знаю, что это очень плохо,и вывод также не приходит из-за этой ошибки: Terminated due to timeout
КОД:
У меня есть метод с именем hackerrankInString(String s)
, он возвращает «ДА» или«НЕТ» строка
// Complete the hackerrankInString function below.
static String hackerrankInString(String s) {
int countR = 0, countA = 0, countK = 0;
//for reading multi-line inputs, it will perform operation individually
// on the inputs
while(scanner.hasNextLine()){
for(int i=0; i < s.length(); i++){
if(s.charAt(i) == 'r')
countR++;
if(s.charAt(i) == 'a')
countA++;
if(s.charAt(i) == 'k')
countK++;
}
//It should atleast have two As, two Rs, and two Ks
if(countR >= 2 && countA >= 2 && countK >= 2){
//If the string contains hackerrank
if(s.contains(Character.toString('h')) && s.contains(Character.toString('a')) && s.contains(Character.toString('c')) && s.contains(Character.toString('k')) && s.contains(Character.toString('e')) && s.contains(Character.toString('r')) && s.contains(Character.toString('n'))){
if((s.indexOf('h') > s.indexOf('a')) && (s.indexOf('h') > s.indexOf('c')) && (s.indexOf('h') > s.indexOf('k')) && (s.indexOf('h') > s.indexOf('e')) && (s.indexOf('h') > s.indexOf('r')) && (s.indexOf('h') > s.lastIndexOf('r')) && (s.indexOf('h') > s.lastIndexOf('a')) && (s.indexOf('h') > s.indexOf('n')) && (s.indexOf('h') > s.lastIndexOf('k'))){
if((s.indexOf('a') > s.indexOf('c')) && (s.indexOf('a') > s.indexOf('k')) && (s.indexOf('a') > s.indexOf('e')) && (s.indexOf('a') > s.indexOf('r')) && (s.indexOf('a') > s.lastIndexOf('r')) && (s.indexOf('a') > s.lastIndexOf('a')) && (s.indexOf('a') > s.indexOf('n')) && (s.indexOf('a') > s.lastIndexOf('k'))){
if((s.indexOf('c') > s.indexOf('k')) && (s.indexOf('c') > s.indexOf('e')) && (s.indexOf('c') > s.indexOf('r')) && (s.indexOf('c') > s.lastIndexOf('r')) && (s.indexOf('c') > s.lastIndexOf('a')) && (s.indexOf('c') > s.indexOf('n')) && (s.indexOf('c') > s.lastIndexOf('k'))){
if((s.indexOf('k') > s.indexOf('e')) && (s.indexOf('k') > s.indexOf('r')) && (s.indexOf('k') > s.lastIndexOf('r')) && (s.indexOf('k') > s.lastIndexOf('a')) && (s.indexOf('k') > s.indexOf('n')) && (s.indexOf('k') > s.lastIndexOf('k'))){
if((s.indexOf('e') > s.indexOf('r')) && (s.indexOf('e') > s.lastIndexOf('r')) && (s.indexOf('e') > s.lastIndexOf('a')) && (s.indexOf('e') > s.indexOf('n')) && (s.indexOf('e') > s.lastIndexOf('k'))){
if((s.indexOf('r') > s.lastIndexOf('r')) && (s.indexOf('r') > s.lastIndexOf('a')) && (s.indexOf('r') > s.indexOf('n')) && (s.indexOf('r') > s.lastIndexOf('k'))){
if((s.lastIndexOf('r') > s.lastIndexOf('a')) && (s.lastIndexOf('r') > s.indexOf('n')) && (s.lastIndexOf('r') > s.lastIndexOf('k'))){
if((s.lastIndexOf('a') > s.indexOf('n')) && (s.lastIndexOf('a') > s.lastIndexOf('k'))){
if(s.indexOf('n') > s.lastIndexOf('k')){
return "YES";
}
}
}
}
}
}
}
}
}
}
}
}
return "NO";
}
Пожалуйста, помогите мне с этим, я хочу выучить два урока,
- Как решить эту задачу
- Как решить моюЭффективное третье утверждение алгоритма
Буду признателен за любую помощь.