Swift 在一行中找出重复的序列

Swift 在一行中找出重复的序列,swift,function,subsequence,Swift,Function,Subsequence,给定任意长度的字符串。我需要找到一行中相同字符的1个子序列 我的函数(有两个,但这是同一个函数的两个部分)变得复杂而繁琐,因此不适合。我需要的功能应该是简单的,不要太长 示例: Input : str = "abcabc" Output : abc Input : str = "aa" Output : a Input : str = "abcbabcb" Output : abcb Input : str = "abcbca" Output : bcbc Input : str = "

给定任意长度的字符串。我需要找到一行中相同字符的1个子序列

我的函数(有两个,但这是同一个函数的两个部分)变得复杂而繁琐,因此不适合。我需要的功能应该是简单的,不要太长

示例:

Input : str = "abcabc"
Output : abc

Input : str = "aa"
Output : a

Input : str = "abcbabcb"
Output : abcb

Input : str = "abcbca"
Output : bcbc

Input : str = "cbabc"
Output : 

Input : str = "acbabc"
Output :
func findRepetition(_ p: String) -> [String:Int] {
    var repDict: [String:Int] = [:]
    var p = p
    while p.count != 0 {
        for i in 0...p.count-1 {
            repDict[String(Array(p)[0..<i]), default: 0] += 1
        }
        p = String(p.dropFirst())
    }
    return repDict
}

var correctWords = [String]()
var wrongWords = [String]()
func getRepeats(_ p: String) -> Bool {
    let p = p
    var a = findRepetition(p)
    for i in a {
        var substring = String(Array(repeating: i.key, count: 2).joined())
        if p.contains(substring) {
            wrongWords.append(p)
            return false
        }
    }
    correctWords.append(p)
    return true
}
我不成功的功能:

Input : str = "abcabc"
Output : abc

Input : str = "aa"
Output : a

Input : str = "abcbabcb"
Output : abcb

Input : str = "abcbca"
Output : bcbc

Input : str = "cbabc"
Output : 

Input : str = "acbabc"
Output :
func findRepetition(_ p: String) -> [String:Int] {
    var repDict: [String:Int] = [:]
    var p = p
    while p.count != 0 {
        for i in 0...p.count-1 {
            repDict[String(Array(p)[0..<i]), default: 0] += 1
        }
        p = String(p.dropFirst())
    }
    return repDict
}

var correctWords = [String]()
var wrongWords = [String]()
func getRepeats(_ p: String) -> Bool {
    let p = p
    var a = findRepetition(p)
    for i in a {
        var substring = String(Array(repeating: i.key, count: 2).joined())
        if p.contains(substring) {
            wrongWords.append(p)
            return false
        }
    }
    correctWords.append(p)
    return true
}
func findRequest(p:String)->[String:Int]{
var repDict:[字符串:Int]=[:]
var p=p
而p.count!=0{
对于0…p.count-1中的i{
repDict[String(Array(p)[0..Bool{
设p=p
var a=融资申请(p)
因为我在一个{
var substring=String(数组(重复:i.key,计数:2).joined())
如果p.contains(子字符串){
错词。附加(p)
返回错误
}
}
修正词.附加(p)
返回真值
}
非常感谢您的帮助!

func-findreplications(\up:String)->[String:Int]{
func findRepetitions(_ p : String) -> [String: Int]{
    let half = p.count / 2 + 1
    var result : [String : Int] = [:]
    for i in 1..<half {
        for j in 0...(p.count-i) {
            let sub = (p as! NSString).substring(with: NSRange.init(location: j, length: i))
            if let val = result[sub] {
                result[sub] = val + 1
            }else {
                result[sub] = 1
            }
        }
    }
    return result
}
设一半=p.count/2+1 变量结果:[字符串:Int]=[:]
对于1中的i..这里有一个使用正则表达式的解决方案。我使用了一个捕获组,该组尝试匹配尽可能多的字符,以便整个组至少重复一次

import Foundation

func findRepetition(_ s: String) -> String? {
    if s.isEmpty { return nil }
    let pattern = "([a-z]+)\\1+"
    let regex = try? NSRegularExpression(pattern: pattern, options: [])
    if let match = regex?.firstMatch(in: s, options: [], range: 
NSRange(location: 0, length: s.utf16.count)) {
        let unitRange = match.range(at: 1)
        return (s as NSString).substring(with: unitRange)
    }
    return nil
}

print(findRepetition("abcabc")) //prints abc
print(findRepetition("aa")) //prints a
print(findRepetition("abcbabcb")) //prints abcb
print(findRepetition("abcbca")) //prints bc
print(findRepetition("cbabc")) //prints nil
print(findRepetition("acbabc")) //prints nil

以下是一个基于的解决方案,该解决方案查找重复(连续)的最长子字符串:

除此之外:


longestRepeatedSubstring(“啊,谢谢你的反馈。在abcabc行中,我得到[“bc”:2,“abc”:2,“a”:2,“bca”:1,“cab”:1,“ab”:2,“ca”:1,“c”:2,“b”:2],但我如何理解这两行中的哪一行是连续的?(在我的例子中,函数应该只返回“abc”)最长和重复次数最多的子字符串是您所需要的在字符串为“abcabc”的示例中,函数返回“bc”、“abc”、“a”=2。“abc”是最长的:)天哪,该字典已经给您提供了重复次数,您可以根据这些计数数来检测哪一个具有两个相同的子序列@在第四个示例“abcbca”中,输出不应该是“bc”吗?