# LeetCode 3146. Permutation Difference between Two Strings
###### tags: `python`,`LeetCode`
>這邊使用Python解題
>時間複雜度為 O(n^2)
>另外附上我與老大哥討論出來更好的做法,在下方更新處,時間複雜度為O(n)
## 題目:
You are given two strings `s` and `t` such that every character occurs at most once in `s` and `t` is a permutation of `s`.
The **permutation difference** between `s` and `t` is defined as the **sum** of the absolute difference between the index of the occurrence of each character in `s` and the index of the occurrence of the same character in `t`.
Return the **permutation difference** between `s` and `t`.
白話文: `s`是給定的字串,`t`是不同排列組合的`s`,答案需要回傳在`s`中出現的索引與相同字元在`t`中出現的索引之間的絕對差之和。
## 範例
### 範例 1:
```
Input: s = "abc", t = "bac"
Output: 2
Explanation:
For s = "abc" and t = "bac", the permutation difference of s and t is equal to the sum of:
The absolute difference between the index of the occurrence of "a" in s and the index of the occurrence of "a" in t.
The absolute difference between the index of the occurrence of "b" in s and the index of the occurrence of "b" in t.
The absolute difference between the index of the occurrence of "c" in s and the index of the occurrence of "c" in t.
That is, the permutation difference between s and t is equal to |0 - 1| + |2 - 2| + |1 - 0| = 2.
```
### 範例 2:
```
Input: s = "abcde", t = "edbac"
Output: 12
Explanation: The permutation difference between s and t is equal to |0 - 3| + |1 - 2| + |2 - 4| + |3 - 1| + |4 - 0| = 12.
```
## 條件限制
* `1 <= s.length <= 26`
* Each character occurs at most once in `s`.
* `t` is a permutation of `s`.
* `s` consists only of lowercase English letters.
## 我的解題思路:
這題需要走訪`s`字串中的所有元素,並找到該元素對應在`t`字串元素的索引位置,將`s`的索引減去`t`的索引後取絕對值做加總。
神奇的表達方法:
`|s[0] - t[s[0]]| + |s[1] - t[s[1]]| + ... |s[n-1] - t[s[n-1]]|`
## 程式碼:
```python
def findPermutationDifference(self, s: str, t: str) -> int:
ans = 0
for item in s:
ans = ans + abs(s.index(item) - t.index(item))
return ans
```
## 更新後更好的做法:
```python!
def findPermutationDifference(self, s: str, t: str) -> int:
data_map = {}
for i in range(len(t)):
data_map[t[i]] = i
ans = 0
for i in range(len(s)):
ans += abs(i - data_map[s[i]])
return ans
```
解釋:
`t`&`s`都是字串,index就都是O(n),所以改個方式使用一個長度為26的陣列(假設是`a`)存`s`每個字元的index,像這樣`a[s[i]-‘a’] =i`,再用另一個迴圈走訪`t`,`sum+=abs(i-s[t[i]-‘a’])`,`sum`就會是答案了,這樣會是2n =O(n)。
###### Topic: `String` `Hash Table`