У меня есть эта проблема
Иметь функцию WildcardCharacters (str) для чтения str, которая будет содержать две строки, разделенные пробелом.Первая строка будет состоять из следующих наборов символов: +, и {N}, что необязательно.Символ плюс (+) представляет один буквенный символ, звездочка () представляет последовательность того же символа длиной 3, если за ним не следует {N}, представляющий, сколько символов должно появиться в последовательности, где N будетбыть хотя бы 1. Ваша цель - определить, точно ли вторая строка соответствует шаблону первой строки во входных данных.
У меня есть решение с помощью js, но сейчас я пытаюсь решить с помощью swift, мне нужна ваша помощь.
эта работа с js, и я использую swift v4.2
код с js
function WildcardCharacters(str) {
// code goes here
let strArr= str.split(' ')
let specChar = strArr[0]
let charStr = strArr[1].split('')
let arr = specChar.split('')
let letters = /^[A-Za-z]+$/
let i = 0
while(i< arr.length){
if(arr[i] == '+'){
if(!charStr[0].match(letters)) return "false"
charStr = charStr.slice(1,charStr.length)
}
else if(arr[i] == '*'){
let curr = charStr[0]
let j = 1, k = 0
if(arr[i+1] != undefined && arr[i+1] == '{'){
k = arr[i+2]
i = i+4
}else{
k = 3
i++
}
while(j < k){
charStr = charStr.slice(1,charStr.length)
if(charStr[0] != curr) return "false"
j++
}
charStr = charStr.slice(1,charStr.length)
continue
}
i++
}
if(charStr.length != 0) return 'false'
return "true"
}
// keep this function call here
WildcardCharacters("+++++* abcdemmmmmm");
код Smakar20 (пользователь github)
код с swift
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 wild (str: String) -> String
{
let strArr = str.split(separator: " ")
let specChar = strArr[0]
var charStr = Array(strArr[1])
let arr = Array(specChar)
var i = 0
while (i<arr.count)
{
if arr[i] == "+"
{
if !String(charStr[0]).isAlphanumeric()
{
return "false"
}
charStr = Array(charStr[0...charStr.count])
}
else if arr[i] == "*"
{
let curr = charStr[0]
var j = 0
var k = 0
if String(arr[i+1]).isAlphanumeric() != true && arr[i+1] == "{"
{
k = Int(String(arr[i+2]))!
i = i+4
}
else
{
k = 3
i += 1
}
while (j<k)
{
charStr = Array(charStr[1...charStr.count])
if charStr[0] != curr
{
return "false"
}
j += 1
}
charStr = Array(charStr[1...charStr.count])
continue
}
i += 1
}
if charStr.count != 0
{
return "false"
}
return "true"
}
wild(str: "+++++* abcdemmmmmm")
если str равен "++ * {5} gheeeee ", тогда вторая строка в этом случае соответствует шаблону, поэтому ваша программа должна вернуть строку true.Если вторая строка не соответствует шаблону, ваша программа должна вернуть строку false.
heeelp