Skip to content

Instantly share code, notes, and snippets.

@tmm
Created August 4, 2020 15:52
Show Gist options
  • Save tmm/d1ca31d2e789572ff217e18f2c610eca to your computer and use it in GitHub Desktop.
Save tmm/d1ca31d2e789572ff217e18f2c610eca to your computer and use it in GitHub Desktop.

Revisions

  1. tmm created this gist Aug 4, 2020.
    33 changes: 33 additions & 0 deletions palindrome.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    import UIKit

    extension String {
    func isAlphanumeric() -> Bool {
    return self.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) == nil && self != ""
    }

    func isAlphanumeric(ignoreDiacritics: Bool = false) -> Bool {
    if ignoreDiacritics { return self.range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil && self != "" }
    else { return self.isAlphanumeric() }
    }
    }

    func isPalindrome(string: String) -> Bool {
    var newString = string
    for char in string {
    if !"\(char)".isAlphanumeric() { continue }

    while newString.count > 0 {
    guard let lastChar = newString.last else { break }
    newString = String(newString.dropLast())

    if char.lowercased() == lastChar.lowercased() { break }
    if "\(lastChar)".isAlphanumeric() { return false }
    }
    }

    return true
    }

    isPalindrome(string: "level") == true ? print("passed") : print("failed")
    isPalindrome(string: "algorithm") == false ? print("passed") : print("failed")
    isPalindrome(string: "A man, a plan, a canal: Panama.") == true ? print("passed") : print("failed")