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


在Swift中,字符串是字符的集合,因此它可以包含重复字符和唯一字符。所以,为了查找字符串中重复的字符,我们创建了一个字典/数组来存储每个字符的计数,然后将计数大于1的字符添加到数组中。

示例

Input: “sky is pink”
Output: 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]()

// Iterate through each character and find duplicates
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"]

结论

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

更新于: 2023年6月13日

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.