2014-12-07 76 views
0

這找到了數組中的重複項,但是我正在尋找能找到字符串中第一個非重複字符的東西。我一直在想辦法做到這一點,我無法弄清楚。這是我得到的最接近的。使用Swift在字符串中找到第一個不重複的字符

var strArray = ["P","Q","R","S","T","P","R","A","T","B","C","P","P","P","P","P","C","P","P","J"] 

println(strArray) 

var filter = Dictionary<String,Int>() 
var len = strArray.count 
for var index = 0; index < len ;++index { 
var value = strArray[index] 
if (filter[value] != nil) { 
    strArray.removeAtIndex(index--) 
    len-- 
}else{ 
    filter[value] = 1 
} 
} 
println(strArray) 
+0

第一個不重複或第一個重複? – 2014-12-07 00:14:26

+0

你想識別「P」嗎? – 2014-12-07 00:15:11

+0

我想找到不重複的字符串中的第一個字符。例如:「DEFD - > E」 – 2014-12-07 00:17:36

回答

5

爲了判斷一個字符重演,經過整個數組一次,遞增發生的次數在字典:

let characters = ["P","Q","R","S","T","P","R","A","T","B","C","P","P","P","P","P","C","P","P","J"] 

var counts: [String: Int] = [:] 
for character in characters { 
    counts[character] = (counts[character] ?? 0) + 1 
} 


let nonRepeatingCharacters = characters.filter({counts[$0] == 1}) 
// ["Q", "S", "A", "B", "J"] 
let firstNonRepeatingCharacter = nonRepeatingCharacters.first! 
// "Q" 
+0

這是一個不錯的解決方案。 – 2014-12-07 00:42:44

+0

謝謝mattt。我讀了你的網站安靜了一下。 – 2014-12-07 00:49:35

+0

@mattt如果你想在1和1,000,000之間的數組中找到一個重複的整數,這也可以工作嗎? – 2014-12-07 00:51:22

0

這是我發現的檢測方式第一個不重複的字符。它刪除空格和標點符號以查找不重複的實際字母或數字。

extension String { 

func removeNonAlphaNumChars() -> String { 
    let charSet = NSCharacterSet.alphanumericCharacterSet().invertedSet 

    return self 
     .componentsSeparatedByCharactersInSet(charSet) 
     .joinWithSeparator("") 
} 

var firstNonRepeatedCharacter: Character? { 
    let alphaNumString = self.removeNonAlphaNumChars() 

    let characters = alphaNumString.characters 
    let count = characters.count 
    guard count > 0 else { return nil } 

    // Find unique chars 
    var dict: [Character: Int?] = [:] 
    for (index, char) in characters.enumerate() { 
     if dict[char] != nil { 
      dict[char] = (nil as Int?) 
     } 
     else { 
      dict[char] = index 
     } 
    } 

    return dict.filter { $0.1 != nil }.sort { $0.1 < $1.1 }.first?.0 
} 
} 
相關問題