# CSPT17 Lecture 2 - UPER
## [Number of Good Pairs](https://leetcode.com/problems/number-of-good-pairs/)
```
"""
Understand
[1,2,3,1,1,3]
output: 4
[1,2,3]
output: 0
[1,1,1,1]
output: 6
Plan
Keep track of number of good pairs using a variable
Go through all possible pairs in the list and count
the ones that are good pairs
Return the number of good pairs
"""
class Solution:
def numIdenticalPairs(self, nums: List[int]) -> int:
numGoodPairs = 0
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] == nums[j]:
numGoodPairs += 1
return numGoodPairs
```
## [Richest Customer Wealth](https://leetcode.com/problems/richest-customer-wealth/submissions/)
```
"""
Understand
accounts = [[1,2,3],[3,2,1,1]]
output: 7
accounts = [[1,2,3],
[3,2,100]]
output: 105
accounts = [[1,2,3]]
output: 6
Plan
Keep track of highest wealth seen
Go through all accounts, using two for loops
Add up all wealth current customer has
If total wealth is higher than what we've seen, update highest wealth seen
return highest wealth seen
"""
class Solution:
def maximumWealth(self, accounts: List[List[int]]) -> int:
maxWealth = 0
for customer in accounts:
currCustomerWealth = sum(customer)
if currCustomerWealth > maxWealth:
maxWealth = currCustomerWealth
return maxWealth
```
## [Uncommon Words](https://leetcode.com/problems/uncommon-words-from-two-sentences/submissions/)
```
class Solution:
"""
Understand
A = "this apple is sweet", B = "this apple is sour"
output: ["sweet", "sour"]
A = "apple apple" B = "apple"
output: []
A = "orange pear" B = "strawberry pineapple"
output = ["orange", "pear", "strawberry", "pineapple"]
Plan
Split the string into a list
Keep track of word occurences in both lists
sentenceA will have a dictionary [word --> num occurences]
sentenceB will have a dictionary [word --> num occurences]
To know if a word is uncommon, check if number of occurences in original sentence is 1
AND it doesn't occur in sentenceB
"""
def uncommonFromSentences(self, A: str, B: str) -> List[str]:
wordCountInA = self.countWords(A)
wordCountInB = self.countWords(B)
res = []
for (word, numOccurence) in wordCountInA.items():
if numOccurence == 1 and word not in wordCountInB:
res.append(word)
for (word, numOccurence) in wordCountInB.items():
if numOccurence == 1 and word not in wordCountInA:
res.append(word)
return res
def countWords(self, sentence):
wordCount = {}
sentenceList = sentence.split(" ")
for word in sentenceList:
if word not in wordCount:
wordCount[word] = 1
else:
wordCount[word] += 1
return wordCount
```