IOS 算法(基礎(chǔ)篇) ----- 找不同

給定兩個字符串 s 和 t璃谨,它們只包含小寫字母。
字符串 t 由字符串 s 隨機(jī)重排,然后在隨機(jī)位置添加一個字母喉前。
請找出在 t 中被添加的字母没酣。

例如

輸入:s = "abcd", t = "abcde"
輸出:"e"
解釋:'e' 是那個被添加的字母。

輸入:s = "ae", t = "aea"
輸出:"a"

1.循環(huán)判斷

比較好想到的一種方法, 對于新手還來說比較好理解, 缺點(diǎn)就是時間, 空間復(fù)雜度都比較高

將s, t轉(zhuǎn)換為正序數(shù)組
循環(huán)判斷, 出現(xiàn)不一樣的就是被添加字母

    func findTheDifference(_ s: String, _ t: String) -> Character {

        var arr_s = s.sorted(), arr_t = t.sorted()

        for i in 0..<s.count {
            if arr_s[i] !=  arr_t[i]{
                return arr_t[i]
            }
        }

        return arr_t.last!

    }

2.和運(yùn)算

通過ascii值之和來判斷處理新增加哪個字母

循環(huán)把s, t里面字母 ascii求和
因?yàn)閠增加了1個字母, t - s 就是增加字母的ascii值, 再編碼換算一下找出增加哪個字母

    func findTheDifference(_ s: String, _ t: String) -> Character {

         var ssum: Int = 0,tsum: Int = 0
         for sc in s {
             ssum += Int(sc.asciiValue!)
         }
         for tc in t {
             tsum += Int(tc.asciiValue!)
         }
        
         return Character(Unicode.Scalar(tsum - ssum)!)

    }

3.異或

其實(shí)用異或處理這道題是比較好的方式
因?yàn)閠只比s多了一個字符, 那么我們其實(shí)把 t, s合并會發(fā)現(xiàn) 同樣字符出現(xiàn)偶數(shù)次, 只有新增字符出現(xiàn)奇數(shù)次

舉個栗子:
t = abcd s = abc 合并針對于a, b, c都出現(xiàn)2次(偶數(shù)次), 而d出現(xiàn)1次(奇數(shù)次)

t = aaaab s = aaaa 合并針對于a 出現(xiàn)9次(奇數(shù)次), 也可以理解 8次a(偶數(shù)) 新加a 1次(奇數(shù))

那么我們用異或方式來處理, 先留意下異或的幾個特點(diǎn)

a^a=0; 任何數(shù)字和自己異或都是0
a^0=a; 任何數(shù)字和0異或還是他自己
a^b^a=a^a^b 異或運(yùn)算具有交換律
就拿上面的舉栗 a^b^c^d^a^b^c = a^a^b^b^c^c^d = 0^0^0^d = d, d其實(shí)就是我們要找的
轉(zhuǎn)成ascii (數(shù)字)進(jìn)行異或, 自己定義一套key(Character):value(Int)異或處理也行

    func findTheDifference(_ s: String, _ t: String) -> Character {

        var asciiValue: UInt8 = 0
        for c in s { asciiValue ^= c.asciiValue! }
        for c in t { asciiValue ^= c.asciiValue! }
        return Character(UnicodeScalar(asciiValue))

    }

題目來源:力扣(LeetCode) 感謝力扣爸爸 :)
IOS 算法合集地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卵迂,一起剝皮案震驚了整個濱河市裕便,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌见咒,老刑警劉巖偿衰,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異改览,居然都是意外死亡下翎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門宝当,熙熙樓的掌柜王于貴愁眉苦臉地迎上來视事,“玉大人,你說我怎么就攤上這事庆揩≈?冢” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵盾鳞,是天一觀的道長犬性。 經(jīng)常有香客問我,道長腾仅,這世上最難降的妖魔是什么乒裆? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮推励,結(jié)果婚禮上鹤耍,老公的妹妹穿的比我還像新娘。我一直安慰自己验辞,他們只是感情好稿黄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跌造,像睡著了一般杆怕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壳贪,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天陵珍,我揣著相機(jī)與錄音,去河邊找鬼违施。 笑死互纯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磕蒲。 我是一名探鬼主播留潦,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼只盹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兔院?” 一聲冷哼從身側(cè)響起殖卑,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秆乳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钻哩,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屹堰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了街氢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扯键。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖珊肃,靈堂內(nèi)的尸體忽然破棺而出荣刑,到底是詐尸還是另有隱情,我是刑警寧澤伦乔,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布厉亏,位于F島的核電站,受9級特大地震影響烈和,放射性物質(zhì)發(fā)生泄漏爱只。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一招刹、第九天 我趴在偏房一處隱蔽的房頂上張望恬试。 院中可真熱鬧,春花似錦疯暑、人聲如沸训柴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幻馁。三九已至,卻和暖如春越锈,著一層夾襖步出監(jiān)牢的瞬間宣赔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工瞪浸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儒将,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓对蒲,卻偏偏與公主長得像钩蚊,于是被迫代替她去往敵國和親贡翘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容