美文网首页
IOS 算法(基础篇) ----- 重新分配字符使所有字符串都相

IOS 算法(基础篇) ----- 重新分配字符使所有字符串都相

作者: ShawnAlex | 来源:发表于2021-06-13 23:41 被阅读0次

    给你一个字符串数组 words(下标 从 0 开始 计数)。
    在一步操作中,需先选出两个 不同 下标 i 和 j,其中 words[i] 是一个非空字符串,接着将 words[i] 中的 任一 字符移动到 words[j] 中的 任一 位置上。
    如果执行任意步操作可以使 words 中的每个字符串都相等,返回 true ;否则,返回 false
    1 <= words.length <= 100
    1 <= words[i].length <= 100
    words[i] 由小写英文字母组成

    例子

    输入:words = ["abc","aabc","bc"]
    输出:true
    解释:将 words[1] 中的第一个 'a' 移动到 words[2] 的最前面。
    使 words[1] = "abc" 且 words[2] = "abc" 。
    所有字符串都等于 "abc" ,所以返回 true

    输入:words = ["ab","a"]
    输出:false
    解释:执行操作无法使所有字符串都相等。

    输入:words = ["a","a", "a"]
    输出:ture

    解题思路

    我感觉这道题的题意很容易让人误解, 稍微翻译一下: 其实就是从words每次选出2个a, b, 可以从a或b中任选择一个字符放到另一个任何位置, 看看最后是否能全相等

    那么我们只需要计算每个字符串出现次数, 判断是否是words.count整数倍即可

    未翻译版

    class Solution {
        func makeEqual(_ words: [String]) -> Bool {
            
            var wordArr = Array(repeating: 0, count: 26)
            
            for s in words {
                for i in s {
                    wordArr[Int(i.asciiValue!) - 97] += 1
                }
            }
            
            for i in wordArr {
                if i % words.count != 0 {
                    return false
                }
            }
            
            return true
    
        }
    }
    

    翻译版

    class Solution {
        func makeEqual(_ words: [String]) -> Bool {
            
            // 设置初始数组26个0, 后面计数使用
            var wordArr = Array(repeating: 0, count: 26)
            
            // 遍历words
            for s in words {
    
                // 遍历word中每个字符串的每个字符
                for i in s {
    
                    // 转成ascii码计算, a为97所以要减
                    // 其实也可以定义一个key-value处理, 而且定义字典时间更快
                    //        let wordList:[String : Int] = ["a":0, "b":1, "c":2, "d":3, "e":4, "f":5, "g":6,
                    //                      "h":7, "i":8, "j":9, "k":10, "l":11, "m":12, "n":13,
                    //                       "o":14, "p":15, "q":16, "r":17, "s":18, "t":19, "u":20,
                    //                       "v":21, "w":22, "x":23, "y":24, "z":25]
                    // 
                    // 字典的话let idx:Int = wordList[String(i)]! 这么取下标
    
                    wordArr[Int(i.asciiValue!) - 97] += 1
                }
            }
    
            // 遍历每个字母出现次数. 不是整数倍直接 false返回   
            for i in wordArr {
                if i % words.count != 0 {
                    return false
                }
            }
            
            // 每个字母都是words.count整数倍, 返回true
            return true
    
        }
    }
    

    题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
    IOS 算法合集地址

    相关文章

      网友评论

          本文标题:IOS 算法(基础篇) ----- 重新分配字符使所有字符串都相

          本文链接:https://www.haomeiwen.com/subject/uxlneltx.html