aboutsummaryrefslogtreecommitdiff
path: root/count_equal_pairs1.py
diff options
context:
space:
mode:
authorJack Sangdahl <[email protected]>2025-03-01 12:53:59 -0700
committerJack Sangdahl <[email protected]>2025-03-01 12:53:59 -0700
commitd244407ce1f87bc1bd01cd3199cc179433582e70 (patch)
treeced8d7f6f619d0a27c5e979d0a7aca1aaafe5d72 /count_equal_pairs1.py
parentbf357e5cbc5730591b60379006396ea613ba4987 (diff)
downloadleetcode-d244407ce1f87bc1bd01cd3199cc179433582e70.tar.gz
leetcode-d244407ce1f87bc1bd01cd3199cc179433582e70.zip
3265. count almost equal pairs 1
Diffstat (limited to 'count_equal_pairs1.py')
-rw-r--r--count_equal_pairs1.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/count_equal_pairs1.py b/count_equal_pairs1.py
new file mode 100644
index 0000000..177b3ce
--- /dev/null
+++ b/count_equal_pairs1.py
@@ -0,0 +1,41 @@
+# 3265. Count Almost Equal Pairs I
+
+"""
+you are given an array 'nums' consisting of positive integers. we call two
+integers 'x' and 'y' in this problem almost equal if both integers can become
+equal after performing the following operation at most once: choose either
+'x' or 'y' and swap any two digits within the chosen number. return the
+number of indices 'i' and 'j' in 'nums' where 'i < j' such that 'nums[i]' and
+'nums[j]' are almost equal. note that it is allowed for an integer to have
+leading zeros after performing an operation.
+"""
+
+
+class Solution(object):
+ def countPairs(self, nums):
+ """
+ :type nums: List[int]
+ :rtype: int
+ """
+ pow10 = [1000000, 100000, 10000, 1000, 100, 10, 1]
+ table, ans = {}, 0
+ for swapped in nums:
+ cnt = table.get(swapped, 0)
+ table[swapped] = cnt + 1
+ ans += cnt
+ for j in range(6):
+ for k in range(j + 1, 7):
+ n = int(swapped / pow10[j] % 10)
+ m = int(swapped / pow10[k] % 10)
+ if n != m:
+ swapped += (m - n) * pow10[j] + (n - m) * pow10[k]
+ ans += table.get(swapped, 0)
+ swapped += (m - n) * pow10[k] + (n - m) * pow10[j]
+ return ans
+
+
+if __name__ == "__main__":
+ obj = Solution()
+ print(obj.countPairs(nums=[3, 12, 30, 17, 21]))
+ print(obj.countPairs(nums=[1, 1, 1, 1, 1]))
+ print(obj.countPairs(nums=[123, 231]))