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

给定两个由小写字母构成的字符串 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/buddy-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public static boolean buddyStrings(String A, String B) {
		//1、判断两个字符串长度是否相等,必须相等才能保证交换之后的结果相等
		if (A.length() != B.length()) {
			return false;
		} 
		//2、AB两个字符串相等的情况下,如果a里面有重复元素就可以进行交换,
		if(A.equals(B)) {
            for (int i = 0; i < A.length(); i++) {
                if (A.indexOf(A.charAt(i), i + 1) != -1) {
                    return true;
                }
            }
            return false;
		}
		//2、AB不相等的情况下,定义一个集合存放两个元素,
		//如果A中下标为i的和B中下标为i的结果值不一样,就存入到list中
		ArrayList list = new ArrayList();
		for (int i = 0; i < A.length(); i++) {
			if (A.charAt(i) != B.charAt(i)) {
				list.add(i);
			}
		}
		//3、list的长度等2的时候
		//取出A中的元素跟B中的下一个元素做对比,相等就返回true
		if (list.size() == 2) {
			boolean flag_0 = A.charAt((int) list.get(0)) == B.charAt((int) list.get(1));
			boolean flag_1 = A.charAt((int) list.get(1)) == B.charAt((int) list.get(0));
			if (flag_0 && flag_1) {
				return true;
			}
		}
		return false;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章