消除字符串重复的字母

时间:2017-08-20 10:38:11

标签: swift

消除Swift中来自Strings的重复字母

var name1 : String =  "sandeep"
var name2 : String = "warrior"
var name3 : String = name1+name2
var name4 : String = //output should be sndpwio

在名称4中,我想删除名称3中的所有重复字母。

我怎样才能做到这一点?

name1name2将来自用户的文本框。

3 个答案:

答案 0 :(得分:4)

使用NSCountedSet计算每个字符出现多次,然后过滤那些只出现一次的字符:

Swift 3

let countedSet = NSCountedSet(array: name3.characters.map { $0 })
let name4 = String(name3.characters.filter { countedSet.count(for: $0) == 1 })

Swift 4

在Swift 4中,String再次是Collection个字符,因此您可以将代码缩短到此:

let countedSet = NSCountedSet(array: name3.map { $0 })
let name4 = name3.filter { countedSet.count(for: $0) == 1}

答案 1 :(得分:1)

您可以通过两个步骤实现此目的。首先,您需要获取两个字符串的唯一字符,然后您需要比较两个字符串的字符,并且只保留两个字符串中不存在的字符。

String扩展名getUniqueCharacters返回调用它的String的唯一字符数组(您可以使用它来删除字符串的重复字符,例如作为" sandeep")。

var name1 = "sandeep"
var name2 = "warrior"

extension String{
    func getUniqueCharacters()->[Character]{
        var characterCounts = [Character:Int]()
        self.characters.forEach{ char in
            if characterCounts[char] != nil {
                characterCounts[char]! += 1
            } else {
                characterCounts[char] = 1
            }
        }
        return self.characters.filter{characterCounts[$0]! == 1}
    }
}

然后你只需在连接的字符串上调用上面的函数就可以了。

let name3 = name1+name2
let name4 = name3.getUniqueCharacters().map{String($0)}.joined()
print(name4) //sndpwio

答案 2 :(得分:0)

var str : String = "sandeepwarrior"

// convert String to array
let letters = str.characters.map { String($0) }  

// get  duplicates
let duplicates = Array(Set(letters.filter({ (i: String) in letters.filter({ $0 == i }).count > 1})))

// remove duplicates from str
for item in duplicates {
    str = str.replacingOccurrences(of: item, with: "")
}

print(str)