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
}

Сразу понимаем что наше решение хорошее и оно достойно исходников го, только написано не так компактно.