问题描述:
样例如下:
代码如下:
import java.util.Scanner;
public class AreAlmostEqual {
//给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),
// 并交换这两个下标所对应的字符。
//如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。
//思路:如果字符串相等,直接返回;不相等,则看是否为两个地方,一次遍历即可
public static boolean areAlmostEqual(String s1, String s2) {
if (s1.length()!=s2.length()) return false;
else {
if (s1.equals(s2)) return true;
char[] temp = new char[5];
int index = 0;
int count = 0;//记录两个字符串不相等的地方的个数
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i)!=s2.charAt(i)){
if (count==2) return false;//若count已经为2,则直接返回false
count++;
temp[index++] = s1.charAt(i);//记录元素
temp[index++] = s2.charAt(i);
}
}
if (temp[0]==temp[3]&&temp[1]==temp[2]) return true;//若不相同的位置的元素相等,则返回true
}
return false;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s1 = scanner.next();
String s2 = scanner.next();
System.out.println(areAlmostEqual(s1,s2));
}
}
结果如下: