Swift 程序查找字符串中的重复字符
在 Swift 中,字符串是字符的集合,因此它可以包含重复字符,也可以包含唯一字符。因此,为了查找字符串中的重复字符,我们创建一个字典/数组来存储每个字符的计数,然后将计数大于 1 的字符添加到数组中。
示例
输入:"sky is pink" 输出:Duplicate char: ["s", "i", "k"]
此处,输入字符串包含三个重复字符,分别是"s"、"i"和"k"。
为了查找字符串中的重复字符,我们将使用以下方法 -
用户定义函数
使用 Array() 和 filter() 方法
使用 NSCountedSet
方法1:使用用户定义函数
为了查找字符串中的重复字符,我们将创建一个函数,该函数以输入字符串作为参数,并返回输入字符串中存在的所有重复元素。
算法
步骤 1 - 创建一个函数来查找字符串中的重复字符。
步骤 2 - 在函数内部将输入字符串转换为小写,以便我们能够高效地执行操作。
步骤 3 - 创建一个字典来存储字符及其数量。
步骤 4 - 创建一个数组来存储重复字符。
步骤 5 - 遍历给定字符串的每个字符。
步骤 6 - 如果某个字符已存在于字典中,则将计数器加 1。否则,将该字符添加到字典中,计数为 1。
步骤 7 - 计算字符的出现次数后,我们遍历每一对字符,并将计数器大于 1 的字符添加到数组中。
步骤 8 - 完成循环后,返回数组。
步骤 9 - 创建字符串
步骤 10 - 调用函数并将输入字符串传递给函数,然后将结果存储在数组中。
步骤 11 - 显示输出。
示例
在下面的 Swift 程序中,我们将查找字符串中的重复字符。为此,我们创建一个以字符串作为输入的函数。该函数创建一个字典来存储字符及其计数。然后,它使用 for-in 循环遍历字符串中的每个字符,如果发现重复字符,则将计数器加 1;否则,在字典中添加一个计数为 1 的字符。在统计完所有字符出现的次数后,该函数使用 for-in 循环遍历字典中的键值对,并仅添加数组中计数大于 1 的字符。遍历所有键值对后,该函数返回一个包含重复元素的数组。
import Foundation
import Glibc
func findDuplicateChar(myStr: String) -> [Character]
{
let newStr = myStr.lowercased()
var charCount = [Character: Int]()
var duplicateChar = [Character]()
for c in newStr
{
if let counter = charCount[c]
{
charCount[c] = counter + 1
} else {
charCount[c] = 1
}
}
for (c, counter) in charCount
{
if counter > 1
{
duplicateChar.append(c)
}
}
return duplicateChar
}
let input = "Tom travel to Japan"
let duplicateChar = findDuplicateChar(myStr: input)
print("Duplicate Characters are:", duplicateChar)
输出
Duplicate Characters are: ["t", "o", "a", " "]
方法 2:使用 Array() 和 filter() 方法
要查找字符串中的重复字符,首先使用 Array() 初始化函数将输入字符串转换为字符数组。
语法
Array(inputString)
这里的 Array() 初始化函数只接受一个参数,并将其转换为数组。
之后,我们将使用 filter() 方法查找重复字符。filter() 方法返回一个包含满足给定条件的元素的数组。
语法
func filter(mSlosure)
这里的 mClosure 是一个闭包,它逐个接受元素并检查其是否符合给定条件。如果是,则将该元素包含在结果数组中。
算法
步骤 1 - 创建一个字符串。
步骤 2 - 将输入字符串转换为字符数组。
步骤 3 - 查找重复字符。
步骤 4 - 显示输出。
示例
在下面的 Swift 程序中,我们将查找字符串中的重复字符。为此,创建一个字符串。然后使用 Array() 初始化器将字符串转换为字符数组。然后使用 filter() 函数计算给定数组中每个字符的出现次数。如果计数大于 1,则该字符重复,因此将该元素添加到新数组中。否则,不重复。过滤所有字符后,我们将检查新数组是否为空。如果新数组为空,则打印"未发现重复字符"。否则,打印重复字符。
import Foundation
import Glibc
var StringVal = "Meeta is cooking Paratha"
let charArray = Array(StringVal)
let duplicatesChars = charArray.filter({ c in
return charArray.filter({ $0 == c }).count > 1
})
if duplicatesChars.isEmpty {
print("No duplicate characters is found.")
} else {
print("Duplicate characters: \(duplicatesChars)")
}
输出
Duplicate characters: ["e", "e", "t", "a", " ", "i", " ", "o", "o", "i", " ", "a", "a", "t", "a"]
方法 3:使用 NSCountedSet
我们也可以使用 NSCountedSet 类来查找字符串中的重复字符。它是一个由不同对象组成的无序可变集合。
算法
NSCountedSet()
此构造函数用于创建一个计数集对象。
算法
步骤 1 - 创建一个字符串。
步骤 2 - 将输入字符串转换为字符数组。
步骤 3 - 查找重复字符。
步骤 4 - 显示输出。
示例
在下面的 Swift 程序中,我们将查找字符串中的重复字符。为此,创建一个字符串。然后使用 Array() 初始化函数将字符串转换为字符数组。然后使用 filter() 函数计算给定数组中每个字符的出现次数。如果计数大于 1,则该字符重复,并添加到新数组中。否则,不重复。过滤所有字符后,我们将检查新数组是否为空。如果新数组为空,则打印"未找到重复字符"。否则,打印重复字符。
import Foundation
import Glibc
var StringVal = "Meeta is cooking Paratha"
let charArray = Array(StringVal)
let duplicatesChars = charArray.filter({ c in
return charArray.filter({ $0 == c }).count > 1
})
if duplicatesChars.isEmpty {
print("No duplicate characters is found.")
} else {
print("Duplicate characters: \(duplicatesChars)")
}
输出
Duplicate characters: ["e", "e", "t", "a", " ", "i", " ", "o", "o", "i", " ", "a", "a", "t", "a"]
方法 3:使用 NSCountedSet
我们也可以使用 NSCountedSet 类来查找字符串中的重复字符。它是一个由不同对象组成的无序可变集合。
算法
NSCountedSet()
此构造函数用于创建一个计数集对象。
算法
步骤 1 - 创建一个字符串。
步骤 2 - 将输入字符串转换为字符数组。
步骤 3 - 查找重复字符。
步骤 4 - 显示输出。
示例
在下面的 Swift 程序中,我们将查找字符串中的重复字符。为此,创建一个字符串。然后使用 NSCounted() 构造函数创建 NSCountedSet 类的对象来跟踪计数的字符。然后我们将使用 Array() 初始值设定项将字符串转换为字符数组。然后使用 add() 方法在 countedSet 中添加元素。然后创建一个新的字符类型数组来存储结果。现在遍历每个字符并检查字符的计数是否大于 1。如果是,则将该字符添加到新数组中。否则,不添加。检查完所有字符后,我们将检查新数组是否为空。如果新数组为空,则打印"未找到重复字符"。否则,打印重复的字符。
import Foundation
import Glibc
var StringVal = "Meeta is cooking Paratha"
let countedSet = NSCountedSet()
let charArray = Array(StringVal)
charArray.forEach { countedSet.add($0) }
var duplicateChar = [Character]()
// 遍历每个字符并查找重复项
for c in charArray {
if countedSet.count(for: c) > 1 && !duplicateChar.contains(c) {
duplicateChar.append(c)
}
}
if duplicateChar.isEmpty {
print("No duplicate characters found.")
} else {
print("Duplicate characters: \(duplicateChar)")
}
输出
Duplicate characters: ["e", "t", "a", " ", "i", "o"]
结论
以上就是我们在字符串中查找重复字符的方法。查找重复字符有助于识别错误或不一致之处、进行数据验证、字符串分析、字符串操作等。因此,使用上述方法,您可以高效地找到字符串中所有重复的字符。