Ios Q re:在不移动索引的情况下清理数组
我正试图用Swift完成 诗人的物理学,我试图确定一个给定的缩写是否可以用一个给定的字符串构成。给你一个字符串和一个缩写,他们想用它来组成。曲线球是您只能删除字符或更改其大小写…您不能在它们上交换索引 我能够完成他们提供给我的字符串的大部分验证和清理,但我只能删除字符,而不能交换索引Ios Q re:在不移动索引的情况下清理数组,ios,arrays,swift,Ios,Arrays,Swift,我正试图用Swift完成 诗人的物理学,我试图确定一个给定的缩写是否可以用一个给定的字符串构成。给你一个字符串和一个缩写,他们想用它来组成。曲线球是您只能删除字符或更改其大小写…您不能在它们上交换索引 我能够完成他们提供给我的字符串的大部分验证和清理,但我只能删除字符,而不能交换索引 let abbrArray = abbreviation.characters.map({String($0)}) var matchingCharArray = capitalizedInputArray.fil
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
而abbreviationIndexPaulw11的答案是正确的,这就是我所做的,但是如果按照页面中的解释,我得到了这个来替换卡住的部分,它应该会从匹配字符数组中删除所有不必要的字符
,你也可以使用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
打破
}
}
}
如果我
谢谢!非常感谢。我明白我错在哪里了。