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+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告