String ends with? Complete the solution so that it returns true if the first argument(string) passed in ends with the 2nd argument (also a string). Examples:
solution("abc", "bc") // returns true
solution("abc", "d") // returns falseЗадача 7 уровня сложности (на сайте кодварс 8 самый легкий, 1 самый сложный). Завершите решение, чтобы оно возвращало истину, если первый переданный аргумент (строка) заканчивается вторым аргументом (также строкой).
В задаче дана функция с двумя входящими строковыми параметрами, вернуть нужно булевное значение.
func solution(str, ending string) bool {
}
Первая мысль при решении этой задачи была определить количество символов в строке ending и сравнить заканчивается ли строка str на неё.
func solution(str, ending string) bool {
l := len(ending)
if str[len(str)-l:] == ending {
return true
}
return false
}Прекрасно вылетел с ошибкой, т.к. строки могут быть пустыми или ending длиннее параметра str, добавляем проверку что бы длинна str была больше ending.
func solution(str, ending string) bool {
if len(str) < len(ending) {return false}
l := len(ending)
if str[len(str)-l:] == ending {
return true
}
return false
}
Супер, все работает задача решена, но решение это не очень хорошее.
Лучшее решение \ Best practice
import "strings"func solution(str, ending string) bool { return strings.HasSuffix(str, ending) }
Использовать функцию strings.HasSuffix является лучшим решением, функция проверяет заканчивается ли строка указанной подстрокой. Залезем в исходники golang и посмотрим как реализована эта функция.
// HasSuffix tests whether the string s ends with suffix.
func HasSuffix(s, suffix string) bool {
return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
}Сразу понимаем что наше решение хорошее и оно достойно исходников го, только написано не так компактно.
