在Swift中是否有类似Python for else语法的表达式

时间:2016-08-27 18:26:27

标签: python swift2 for-else

我正在解决算法问题,我使用Python和Swift来解决它。在python中,我可以使用for else语法轻松解决它。但是在Swift中,我很难找到类似于python的for else语法的方法。

这是算法问题,它可以帮助您理解我在做什么。

  

给定一个字符串数组字,找到length的最大值(word [i])   * length(word [j])其中两个单词不共享共同字母。您可以假设每个单词仅包含小写字母。如果不   这两个词存在,返回0。

     

示例1:给定[“abcw”,“baz”,“foo”,“bar”,“xtfn”,“abcdef”]

     

返回16

     

这两个词可以是“abcw”,“xtfn”。

     

示例2:给定[“a”,“ab”,“abc”,“d”,“cd”,“bcd”,“abcd”]

     

返回4

     

这两个词可以是“ab”,“cd”。

     

示例3:给定[“a”,“aa”,“aaa”,“aaaa”]

     

返回0

     

没有这样的话。

这是我的两套代码。

Python代码可以运行。

class Solution(object):
    def maxProduct(self, words):

        maximum = 0
        while words:
            currentWord = set(words[0])
            current_length = len(words[0])
            words = words[1:]

            for ele in words:
                for char in currentWord:
                    if char in ele:
                        break
                else:
                    maximum = max(maximum,current_length*len(ele))
        return maximum

快速代码效果不佳。

class Solution
{
    func maxProduct(words: [String]) -> Int
    {
        var input = words
        let length = input.count
        var maximum = 0
        while input.count != 0
        {
            let cur_word = Set(input[0].characters)
            let cur_length = input[0].characters.count
            input = Array(input[1..<length])


            for item in input
            {
                for char in item.characters
                {
                    if cur_word.contains(char)
                    {
                        break
                    }
                }

                // how add a control follow here? if cur_word does not share same character with item, then does the below max statement

                //else
                //{
                    maximum = max(maximum,cur_length*(item.characters.count))
                //}


            }

        }
        return maximum
    }
}

2 个答案:

答案 0 :(得分:0)

如果调用injectScriptFile(view, "gif_freezer.js"); view.loadUrl("javascript:freezeAllGifs();"); ,您可以引入一个标记来记录。声明

break

相同
for a in b:
    if c(a):
        break
else:
    d()

但请注意,您根本不需要found = False for a in b: if c(a): found = True break if not found: d() 循环,因为您可以使用Set.isDisjointWith(_:) method

for char in item.characters

(在Swift 3上,此方法为renamed to Set.isDisjoint(with:)

答案 1 :(得分:0)

我想分享一下我的答案。感谢Kennytm的帮助。

class Solution
{
    func maxProduct(words: [String]) -> Int
    {
        var input = words
        var length = input.count
        var maximum = 0
        while input.count != 0
        {
            let cur_word = Set(input[0].characters)
            let cur_length = input[0].characters.count
            input = Array(input[1..<length])
            length -= 1

            for item in input
            {
                if cur_word.isDisjointWith(item.characters)
                {
                    maximum = max(maximum, cur_length*(item.characters.count))
                }
            }

        }
        return maximum
    }
}