Leetcode 859 - Buddy Strings

題目

Problem#

給你兩個字串 sgoal 問你可不可以交換兩個字元的方式來把 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#

心得#

一開始題目沒讀懂,以為是可以交換無限次,然後可以不交換;但實際上題目要求是,只交換一次,不能不交換