我试图通过在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])
}
}