На этой неделе я собираюсь вернуться к более простым временам, которые напоминают мне о пиве, которое мы с мужем пили в Trader Joe's, и написать о проблеме со строками, которую я решил для задания по программированию на Hackerrank.
Проблема
Инструкции заключались в том, чтобы написать функцию, которая принимает строку, поворачивает ее общее число раз, равное числу, меньшему, чем длина строки, а затем возвращает количество результирующих строк, начинающихся и заканчивающихся одной и той же буквой. Первая строка является входной строкой, а затем функция формирует дополнительные строки, перемещая первую букву ввода в ее конец. Например, если входной строкой является «abgha», эта строка циклически переворачивается четыре раза, чтобы получить результирующие строки: «bghaa», «ghaab», «haabg» и «aabgh». Возвращаемое значение будет равно 1, потому что только исходная строка начинается и заканчивается одной и той же буквой.
Мое решение
Ниже мое решение; Я не уверен, проходит ли он все крайние случаи, но, похоже, он работает, когда я тестирую его в своем терминале. Первое условие может различаться в зависимости от того, как вы хотите обрабатывать входные строки длиной 0 или 1. Я указал, что в этих случаях функция должна возвращать 1. Моей причиной этого было то, что строка типа «a» имеет один и тот же первый и последний символ. Строка «» на самом деле не содержит никаких символов, поэтому то, что вы хотели бы вернуть в этой ситуации, может быть более спорным. Как и многие другие вещи в жизни, это зависит от контекста и зависит от того, чего вы пытаетесь достичь, используя эту функцию. И, как обычно, я не знаю, для чего на самом деле может быть полезна такая функция, кроме как для пыток — я имею в виду обучение — начинающих инженеров-программистов.
function countStrings(s) { let lengthOfString = s.length; if(lengthOfString === 1 || lengthOfString === 0){ return 1 } else{ let i = 1; let count = 0; if(s[0]===s[lengthOfString-1]){ count+=1; } while (i < lengthOfString){ s= s.slice(1, lengthOfString)+s[0] if(s[0]===s[lengthOfString-1]){ count+=1; } i++ } return count; } }
Объяснение
В первом операторе if я обрабатываю случай, когда входные строки имеют длину 0 или 1. Если функция соответствует этому условию, она завершается, возвращая 1. В противном случае выполняется следующая часть функции в операторе else. Во-первых, я установил переменную count для суммирования количества строк, начинающихся и заканчивающихся одной и той же буквой. Затем функция просматривает входную строку; если он начинается и заканчивается одной и той же буквой, счет увеличивается на единицу. Затем выполняется цикл while, пока переменная i меньше длины входной строки. В цикле while дополнительные строки создаются с использованием метода slice, который вырезает часть s от позиции индекса 1 до конца строки, а затем добавляет символ в позиции индекса 0 в конец этого фрагмента. Новая строка переназначается как значение «s». Затем эта строка проверяется, чтобы увидеть, совпадают ли первый и последний символы. Если это так, счетчик увеличивается, и переменная i увеличивается. Цикл while выполняется снова, пока не будет выполнено условие выхода. В конце счетчик возвращается.
И это все, что нужно сделать. Хороших выходных!