题目

image.pngimage.png

解题代码

  1. class Solution {
  2. public boolean buddyStrings(String s, String goal) {
  3. if(s.length() != goal.length() ) return false;
  4. Set<Character> set = new HashSet<>();
  5. for(int i = 0; i < s.length(); i++ ) {
  6. set.add(s.charAt(i) );
  7. }
  8. //1 <= s.length, goal.length <= 2 * 104
  9. if(s.equals(goal) && s.length() != set.size() ) return true;
  10. int time = 0,first = 0, seconds = 0;
  11. for(int i = 0; i < s.length(); i++ ) {
  12. if(s.charAt(i) != goal.charAt(i)) {
  13. if(time == 2) return false; //出现三次以上不同字符,返回false
  14. if(time == 1) seconds = i; //第二次出现,记录位置
  15. if(time == 0) first = i; //第一次不一样
  16. time ++ ;
  17. }
  18. }
  19. if(time == 0) return false;
  20. if(s.charAt(first) == goal.charAt(seconds) && s.charAt(seconds) == goal.charAt(first) ) return true;
  21. return false;
  22. }
  23. }