【问题标题】:How to remove element from a String with Int index如何从具有 Int 索引的字符串中删除元素
【发布时间】:2022-01-16 18:21:12
【问题描述】:

我试图通过在 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 个

【问题讨论】:

  • 什么是sk 是什么? stringGoal 是什么?您需要包含这些才能拥有minimal reproducible example
  • @jnpdx k为删除限制,s为初始字符串,stringGoal为比较字符串。它们是函数参数,这就是我初始化新属性的原因
  • 你能给出输入和预期输出吗?
  • @cristian_064 完成
  • 您说“我试图通过在 Int 范围内比较它们来计算两个字符串中的相同元素......”这是什么意思?删除限制?嗯?根本不清楚您要计算什么。您需要解释清楚,我们才能帮助您实施。

标签: swift string integer


【解决方案1】:

我有这段代码,但我没有使用 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
}

【讨论】:

  • @christian_064 感谢您的努力
【解决方案2】:

它帮助了我。

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])
}

}

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2017-12-24
    相关资源
    最近更新 更多