高级农民
- 积分
- 2351
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2011-7-18
- 最后登录
- 1970-1-1
|
- import unittest
- class TrieNode:
- def __init__(self):
- self.table = dict()
- self.phraseEnd = False
- class Trie:
- def __init__(self):
- self.root = TrieNode()
- def insertPhrase(self, phrase):
- node = self.root
- words = phrase.split(' ')
- for word in words:
- if word not in node.table:
- node.table[word] = TrieNode()
- node = node.table[word]
- node.phraseEnd = True
- def search(self, words):
- node = self.root
- for word in words:
- if node.phraseEnd:
- return True
- if word not in node.table:
- return False
- node = node.table[word]
- return node.phraseEnd
- class Solution:
- def isSafe(self, blackList, pintext):
- if not blackList or not pintext:
- return True
-
- trie = Trie()
- for phrase in blackList:
- trie.insertPhrase(phrase)
-
- pintextWords = pintext.split(" ")
- for i in range(len(pintextWords)):
- if trie.search(pintextWords[i:]):
- return False
- return True
- class SolutionTest(unittest.TestCase):
- def testIsSafe(self):
- sol = Solution()
- blackList = ["machine guns", "world war i"]
- self.assertFalse(sol.isSafe(blackList, "i love world war i"))
- self.assertTrue(sol.isSafe(blackList, "world war ii"))
- if __name__=='__main__':
- unittest.main()
复制代码
补充内容 (2018-10-24 14:13):
试着用Trie的思路做了第一个pintext safe的问题 |
|