每日一题(dayone)

每日一题(dayone

仅执行一次字符串交换能否使两个字符串相等

解题思路

  • 首先通过字符串的equals方法判断两个字符串是否相等,如果相等直接返回结果为true
  • 其次,这里我的思路是如果可以一次转换就可以相等,则这两个字符串需要有相同的字符。
    1. 这里我通过字符串的tochararray方法,把字符串转换为字符数组,然后通过Arrays工具类的sort方法进行排序。
    2. 对排完序的两个字符数组通过遍历进行逐个字符比较,则只有全等的两个字符数组才有可能是所求结果
    3. 如果两个字符数组不相等则直接返回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;
            }
        }

当然这里解法显得很复杂,而且时间复杂度和空间复杂度都不是很好,这仅仅是我个人的一个思路,浅浅记录一下。

判断国际象棋棋盘中一个格子的颜色

解题思路

  • 首先我是把棋盘看作一个二维数组,然后具体是给二维数组赋值来实现黑白格

    1. 创建数组完成后,通过for循环进行赋值,数组元素为1表示黑格
    2. 赋值通过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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值