Swift 程序查找字符串中的重复字符

swiftserver side programmingprogramming更新于 2025/9/19 19:52:17

在 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"]

结论

以上就是我们在字符串中查找重复字符的方法。查找重复字符有助于识别错误或不一致之处、进行数据验证、字符串分析、字符串操作等。因此,使用上述方法,您可以高效地找到字符串中所有重复的字符。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部