如何从具有Int索引的字符串中删除元素



我试图通过在Int范围内比较两个字符串中的相同元素来计数。我解决了下标的问题,但现在我得到了一个"额外的";要素这是我的代码:

func getResult(s: String, k: Int, stringGoal: String) -> Int {

var identiticalSymbols = 0
var deletionsLimit = k
var string = s

if string.count <= 19, deletionsLimit <= 9{
for i in 0...string.count-1 {

if string[i] == stringGoal[i] {
identiticalSymbols += i
}

else {
string.remove(at: String.Index(utf16Offset: i, in: string))

deletionsLimit -= 1
}

}

}
return identiticalSymbols
}
}
extension String {

subscript(_ i: Int) -> String {
let idx1 = index(startIndex, offsetBy: i)

return String(self[idx1..<endIndex])
}

subscript (r: Range<Int>) -> String {
let start = index(startIndex, offsetBy: r.lowerBound)
let end = index(startIndex, offsetBy: r.upperBound)
return String(self[start ..< end])
}

}

我的输入:

let result = getResult(s: "agdd", k: 4, stringGoal: "gdd")

s是初始字符串,k是删除限制,goalString是用于比较的字符串。

我得到了6个相同的符号,而不是3个

我有这个代码,但我没有使用k,我正在计算重复次数,并删除我已经计算过的重复次数。

func getRepetitions(firstString: String, comparativeString: String) -> Int {
var repetitions = 0
var comparativeStringName = Array(comparativeString)
for character in firstString {
if comparativeStringName.contains(character),
let index = comparativeStringName.firstIndex(of: character){
comparativeStringName.remove(at: index)
repetitions += 1
}
}
return repetitions
}

它帮助了我。

func getResult(s:String,k:Int,stringGoal:String(->Int{

var identiticalSymbols = 0
var deletionsLimit = k

var字符串=s

if string.count <= 19, deletionsLimit <= 9{
for i in 0...string.count-1 {
if string[i] == stringGoal[i] {
identiticalSymbols += 1
}
else {
string.remove(at: String(string[i]).startIndex)

deletionsLimit -= 1
}
}

}
return identiticalSymbols
}

}

扩展字符串{

var length: Int {
return count
}
subscript (i: Int) -> String {
return self[i ..< i + 1]
}
func substring(fromIndex: Int) -> String {
return self[min(fromIndex, length) ..< length]
}
func substring(toIndex: Int) -> String {
return self[0 ..< max(0, toIndex)]
}
subscript (r: Range<Int>) -> String {
let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
upper: min(length, max(0, r.upperBound))))
let start = index(startIndex, offsetBy: range.lowerBound)
let end = index(start, offsetBy: range.upperBound - range.lowerBound)
return String(self[start ..< end])
}

}