как исправить: индекс массива вне диапазона - PullRequest
0 голосов
/ 15 мая 2019

У меня есть эта проблема

Иметь функцию 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...