每日一题(dayone)
仅执行一次字符串交换能否使两个字符串相等
解题思路
- 首先通过字符串的equals方法判断两个字符串是否相等,如果相等直接返回结果为true
- 其次,这里我的思路是如果可以一次转换就可以相等,则这两个字符串需要有相同的字符。
- 这里我通过字符串的tochararray方法,把字符串转换为字符数组,然后通过Arrays工具类的sort方法进行排序。
- 对排完序的两个字符数组通过遍历进行逐个字符比较,则只有全等的两个字符数组才有可能是所求结果
- 如果两个字符数组不相等则直接返回false.
- 这时进行第三步比较,对未排序的字符数组进行遍历比较,当两个同索引位置字不相等,则通过设置一个整形变量count记录不相等的数量,当count大于2时,则该字符串并不能一次转换而完成,所以返回false即可。
- 当经过所有的筛选条件后,说明该字符串符合要求,返回true即可。
实现代码
static public boolean areAlmostEqual(String s1, String s2) {
if(s1.equals(s2))
{
return true;
}
else
{
char[] chars = s1.toCharArray();
char[] chars1 = s2.toCharArray();
Arrays.sort(chars);
Arrays.sort(chars1);
//System.out.println(new String(chars).equals(new String(chars1)));
if(String.valueOf(chars).equals(String.valueOf(chars1))){
int count=0;
for (int i=0;i<s1.length();i++)
{
if (s1.charAt(i)!=s2.charAt(i))
{
count++;
}
}
if (count>2)
{
return false;
}
return true;
}
return false;
}
}
当然这里解法显得很复杂,而且时间复杂度和空间复杂度都不是很好,这仅仅是我个人的一个思路,浅浅记录一下。
判断国际象棋棋盘中一个格子的颜色
解题思路
-
首先我是把棋盘看作一个二维数组,然后具体是给二维数组赋值来实现黑白格
- 创建数组完成后,通过for循环进行赋值,数组元素为1表示黑格
- 赋值通过for循环,同时借助了标识位,因为黑格在每一行的起始位置不同,每行赋值完成,标识位取反,同时内层循环起始条件更换,来实现黑棋。
-
通过字符串的charat方法来获取字符串的第一个值也就是二维数组里的列,charat(1)获取字符串的第二个字符,既是二维数组的行数,注意这里棋盘行数和二维数组行数相反,需要进行变换。
-
我把输入的字符a-h通过switch做啦个映射,即对应每个二维数组的元素,再通过判断该数组元素的值即可判断该位置是黑格还是白格
代码实现
public boolean squareIsWhite(String coordinates) {
int[][] ints = new int[8][8];
boolean flag=true;
int j=1;
int numericValue;
for (int i=0;i<8;i++)
{
for (;j<8;){
ints[i][j]=1;
j+=2;
}
flag=!flag;
if (flag) j=1;else j=0;
}
//打印测试
// for (int a[]:ints
// ) {
// for (int i:a
// ) {
// System.out.print(i);
// }
// System.out.println();
// }
switch (coordinates.charAt(0))
{
case 'a':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][0]==1) return false;else return true;
case 'b':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][1]==1) return false;else return true;
case 'c':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][2]==1) return false;else return true;
case 'd':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][3]==1) return false;else return true;
case 'e':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][4]==1) return false;else return true;
case 'f':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][5]==1) return false;else return true;
case 'g':
numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][6]==1) return false;else return true;
case 'h':numericValue = Character.getNumericValue(coordinates.charAt(1));
if (ints[8-numericValue][7]==1) return false;else return true;
default:return false;
}
}
代码优化
通过找规律可以判断出,当行和列都为奇数或偶数时,则该位置为黑格
这时我们通过字符串的charat方法分别获取字符串的两个值
两个奇数的和还是奇数,两个偶数的和还是偶数
返回结果为true代表白格,false代表黑格,既是当两个数和为奇数返回true,反之返回false
public boolean squareIsWhite(String coordinates) {
return ((coordinates.charAt(0)+Character.getNumericValue(coordinates.charAt(1)))%2==1);
}