Problem#
給你兩個字串 s
和 goal
問你可不可以交換兩個字元的方式來把 s
變成 goal
交換字元: 給兩個 index $i$ 和 $j$ 且 $i \neq j$ ,交換 s[i]
和 goal[j]
測資限制#
- $1 \le s, goal \le 2\cdot 10^4$
s
,goal
are lowercase
想法#
題目說只交換一次,不能不交換(0次)。首先是兩個字串長度要相等,否則怎麼交換都沒用
再來可以分情況討論,如果 s == goal
則如果有重複兩次以上的字元出現,則回傳 true (代表去 swap 那個重複的字元就可滿足條件);
如果 s != goal
則直接掃過一次,看兩個字串有多少不一樣的字元,如果不一樣字元數 == 2 則回傳 true (代表交換那兩個字元就可滿足條件)
- 時間複雜度: $\mathcal{O}(n)$
- 空間複雜度: $\mathcal{O}(1)$
AC Code#
心得#
一開始題目沒讀懂,以為是可以交換無限次,然後可以不交換;但實際上題目要求是,只交換一次,不能不交換