如何解决:数组索引超出范围

时间:2019-05-15 20:12:21

标签: javascript arrays swift string

我有这个问题

让函数WildcardCharacters(str)读取str,它将包含两个由空格分隔的字符串。第一个字符串将由以下字符集组成:+,和{N}(可选)。加号(+)表示单个字母字符,星号()表示长度为3的相同字符的序列,除非其后跟{N}表示应该在序列中出现多少个字符,其中N至少为1。您的目标是确定第二个字符串是否与输入中第一个字符串的模式完全匹配。

我有js解决方案,但现在我想迅速解决,我需要您的帮助。

这与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)的代码

快速编码

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

0 个答案:

没有答案