В своем опыте работы с Golang, я столкнулся с необходимостью регулярной проверки строк на палиндромность. Палиндром ⸺ это слово или фраза, которые читаются одинаково как вперед, так и назад. Например, ″шалаш″ или ″топот″.
В Golang проверка строки на палиндромность весьма проста. Для этого я использовал следующий подход⁚
1. Удаление лишних символов и приведение строки к нижнему регистру. Это помогает избежать проблем с пробелами и различными символами в строке, которые могут повлиять на результат проверки. Я использовал функцию `ToLower` из пакета `strings` для приведения строки к нижнему регистру и `Map` из пакета `unicode` для удаления пробелов и пунктуации.
go
import (
″strings″
″unicode″
)
func cleanString(s string) string {
// Приведение строки к нижнему регистру
s strings.ToLower(s)
// Удаление пробелов и пунктуации
return strings.Map(func(r rune) rune {
if unicode.IsLetter(r) || unicode.IsDigit(r) {
return r
}
return -1
}, s)
}
2. Проверка строки на палиндромность. После очищения строки от лишних символов, я применил алгоритм двух указателей для проверки, является ли строка палиндромом. Алгоритм заключается в том, что мы сравниваем символы с двух концов строки, двигая указатели одновременно от начала и конца строки внутрь. Если символы равны, мы продолжаем двигаться внутрь строки. Если хотя бы одна пара символов не равна, строка не является палиндромом.
go
func isPalindrome(s string) bool {
s cleanString(s)
// Алгоритм двух указателей для проверки палиндромности
i, j ⁚ 0, len(s)-1
for i < j {
if s[i] ! s[j] {
return false
}
i
j--
}
return true
}
Пример использования⁚
go
func main {
str ⁚ ″А роза упала на лапу Азора!″ // Пример строки
isPal ⁚ isPalindrome(str) // Проверка на палиндромность
}
Результатом выполнения этого кода будет `true`, так как строка ″А роза упала на лапу Азора!″ является палиндромом.
Таким образом, я научился проверять строки на палиндромность в Golang, используя алгоритм двух указателей. Этот подход прост и эффективен, и может быть использован для решения подобных задач.