leetcode.859. 亲密字符串

给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。

示例 1:
输入: A = "ab", B = "ba"
输出: true
示例 2:
输入: A = "ab", B = "ab"
输出: false
示例 3:
输入: A = "aa", B = "aa"
输出: true
示例 4:
输入: A = "aaaaaaabc", B = "aaaaaaacb"
输出: true
示例 5:
输入: A = "", B = "aa"
输出: false
提示:
0 <= A.length <= 20000
0 <= B.length <= 20000
A 和 B 仅由小写字母构成。

思路:

* 可以分成两种情况分析:
  a、标记对比,出现相同字母的个数为2,根据标记,交叉判断A,B是否相等,相等则满足条件
  b、标记对比,出现相同字母的个数为0,判断单个是否出现相同字母个数等于2或者超过2以上的,则满足条件

代码:

public boolean buddyStrings(String A, String B) {
		if(A.length()==0 || B.length()==0 || A.length()!=B.length())return false;
		char[] a = A.toCharArray();
		char[] b = B.toCharArray();
		ArrayList<Integer> list = new ArrayList<>();
		int ans = 0;
		for (int i = 0; i < b.length; i++) {
			if(a[i] != b[i]) {
				ans++;//标记对比出现不同字母的个数
				list.add(i);//标记出现不同字母的坐标
			}
		}
		if(ans == 2) {//不同字母出现个数为2,判断是否成立
			char[] c = new char[4];
			int cnt = 0;
			for(Integer i : list) {
				c[cnt++] = a[i];
				c[cnt++] = b[i];
			}
			if(c[0]==c[3] && c[1]==c[2])return true;//交叉判断是否相等,相等则满足条件
		}
		if(ans == 0) {//不同字母出现个数为0,判断是否成立
			HashMap<Character, Integer> m = new HashMap<>();
			for (int i = 0; i < a.length; i++) {
				if(m.get(a[i])==null)m.put(a[i], 1);
				else m.put(a[i], m.get(a[i])+1);
			}
			for (Character key : m.keySet()) {
				Integer val = m.get(key);
				if(val>=2)return true;//当字符串出现相同字母等于2个或者超过2个以上,则满足替换条件,出现一个字母即可
			}
		}
		return false;
	}

测试样例:

System.out.println(buddyStrings("ab","ba"));//true
System.out.println(buddyStrings("ab","ca"));//false
System.out.println(buddyStrings("aa","bb"));//false
System.out.println(buddyStrings("ab","ab"));//false
System.out.println(buddyStrings("aa","aa"));//true
System.out.println(buddyStrings("abc","abc"));//false
System.out.println(buddyStrings("aba","aba"));//true
System.out.println(buddyStrings("abab","abab"));//true
System.out.println(buddyStrings("aaaaaaabc","aaaaaaacb"));//true
System.out.println(buddyStrings("","aa"));//false
System.out.println(buddyStrings("abcaa","abcbb"));//false
System.out.println(buddyStrings("abcd","cbaa"));//false
System.out.println(buddyStrings("aaaaaaaaaaaaaaaaaaaaaaaa","aaaaaaaaaaaaaaaaaaaaaaaa"));//true

在这里插入图片描述

发布了81 篇原创文章 · 获赞 8 · 访问量 9537

猜你喜欢

转载自blog.csdn.net/baidu_34310405/article/details/103565426