Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Q re:在不移动索引的情况下清理数组_Ios_Arrays_Swift - Fatal编程技术网

Ios Q re:在不移动索引的情况下清理数组

Ios Q re:在不移动索引的情况下清理数组,ios,arrays,swift,Ios,Arrays,Swift,我正试图用Swift完成 诗人的物理学,我试图确定一个给定的缩写是否可以用一个给定的字符串构成。给你一个字符串和一个缩写,他们想用它来组成。曲线球是您只能删除字符或更改其大小写…您不能在它们上交换索引 我能够完成他们提供给我的字符串的大部分验证和清理,但我只能删除字符,而不能交换索引 let abbrArray = abbreviation.characters.map({String($0)}) var matchingCharArray = capitalizedInputArray.fil

我正试图用Swift完成

诗人的物理学,我试图确定一个给定的缩写是否可以用一个给定的字符串构成。给你一个字符串和一个缩写,他们想用它来组成。曲线球是您只能删除字符或更改其大小写…您不能在它们上交换索引

我能够完成他们提供给我的字符串的大部分验证和清理,但我只能删除字符,而不能交换索引

let abbrArray = abbreviation.characters.map({String($0)})
var matchingCharArray = capitalizedInputArray.filter({abbrArray.contains($0)})
我试图遍历缩写数组的每个元素,删除
matchingCharArray
前面与
abbrArray
索引中的字符不匹配的字符

以下是我对该部分的代码:

for index in 0..<abbrArray.count {
    let charToEvaluate = abbrArray[index]
    while matchingCharArray.first != charToEvaluate {
        matchingCharArray.removeFirst()
    }
}

if matchingCharArray.joined().range(of: abbreviation) == nil {
    return "NO"
}
用于0中的索引


任何关于:如何在不移动索引的情况下清理我的
matchingCharArray
数组的建议都非常感谢。

这个挑战的诀窍是,您不需要生成输出数组,您只需回答“是”或“否”就可以生成输出数组。这个答案可以通过回答“在缩写中字母序列是否存在于输入字符串中,考虑到目标字母之间可能有其他字符”来确定,当然,你还需要考虑一些目标字母可能是小写字母。 因为字符串的顺序很重要,这就排除了使用集合的可能性。我的做法是:

  • 将整个输入字符串转换为大写
  • 遍历输入字符串,查找缩写中的第一个字符
  • 如果找到,请返回步骤2,查找缩写中的下一个字符
  • 如果到达缩写字符串的末尾,请返回“是”
  • 如果在找到缩写中的最后一个字符之前到达输入字符串的末尾,请返回“否”
  • 我在Swift中的回答是:

    func canBeAbbreviated(input: String, abbreviation: String) -> String {
    
        var retValue = "NO"
    
        let inputCharacters = input.uppercased().characters
        let abbreviationCharacters = abbreviation.characters
        var inputIndex = inputCharacters.startIndex
        var abbreviationIndex = abbreviationCharacters.startIndex
    
        while abbreviationIndex < abbreviationCharacters.endIndex {
            while inputIndex < inputCharacters.endIndex {
    
                let iChar = inputCharacters[inputIndex]
                let aChar = abbreviationCharacters[abbreviationIndex]
                inputIndex = inputCharacters.index(after: inputIndex)
    
               if iChar == aChar {
                    abbreviationIndex = abbreviationCharacters.index(after: abbreviationIndex)
                    break
                }
            }
            if inputIndex == inputCharacters.endIndex {
                break;
            }
        }
    
        if abbreviationIndex == abbreviationCharacters.endIndex {
            retValue = "YES"
        }
    
        return retValue
    }
    
    func可以修改(输入:String,缩写:String)->String{
    var retValue=“否”
    让inputCharacters=input.uppercased().characters
    让abbreviationCharacters=缩写.characters
    var inputIndex=inputCharacters.startIndex
    var abbreviationIndex=abbreviationCharacters.startIndex
    而abbreviationIndex
    Paulw11的答案是正确的,这就是我所做的,但是如果按照页面中的解释,我得到了这个来替换卡住的部分,它应该会从
    匹配字符数组中删除所有不必要的字符
    ,你也可以使用
    abbrArray.filter({capitalizedInputArray.contains($0)})
    并将
    计数
    abbrArray
    本身进行比较,这样就足以替换整个中间部分了:

    var i = 0
    var indexToRemove = [Int]()
    for char in abbrArray {
        while i < matchingCharArray.count {
            if matchingCharArray[i] != char {
                indexToRemove.append(i)
                i+=1
            } else {
                i+=1
                break
            }
        }
    }
    
    if i < matchingCharArray.count - 1 {
        matchingCharArray.removeSubrange(i...matchingCharArray.count-1)
    }
    
    for j in indexToRemove.reversed() {
        matchingCharArray.remove(at: j)
    }
    
    var i=0
    var indexToRemove=[Int]()
    对于abbrArray中的char{
    而我却不知道该怎么做{
    如果匹配chararray[i]!=char{
    indexToRemove.append(i)
    i+=1
    }否则{
    i+=1
    打破
    }
    }
    }
    如果我
    谢谢!非常感谢。我明白我错在哪里了。