• 记录一次简单的优化 力扣 1790. 仅执行一次字符串交换能否使两个字符串相等


    题目: https://leetcode-cn.com/problems/check-if-one-string-swap-can-make-strings-equal/
    给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。

    如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。

    第一次解题的答案:

    public boolean areAlmostEqual(String s1, String s2) {
            if (s1.equals(s2)) {
                return true;
            }
    
            // 长度不相等,直接返回false
            if (s1.length() != s2.length()) {
                return false;
            }
    
            // 找出所有不相等值的下标
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < s1.length(); i++) {
                if (s1.charAt(i) != s2.charAt(i)) {
                    list.add(i);
                }
            }
    
            // 多于或者少于2处,交换之后都不会相等,直接返回false
            if (list.size() != 2) {
                return false;
            }
    
            // 只有两处不同,则判断值是否相等
            return s1.charAt(list.get(0)) == s2.charAt(list.get(1)) && s1.charAt(list.get(1)) == s2.charAt(list.get(0));
    
        }
    

    通过,但是不理想

    后来发现代码有可以优化的地方,比如既然知道了最多只有2处不同才有可能通过一次交换相等,修改代码,重新提交:
    提交结果如下(修改后的代码在下面):

     public boolean areAlmostEqual(String s1, String s2) {
            if (s1.equals(s2)) {
                return true;
            }
    
            // 长度不相等,直接返回false
            if (s1.length() != s2.length()) {
                return false;
            }
    
            // 找出所有不相等值的下标
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < s1.length(); i++) {
                if (s1.charAt(i) != s2.charAt(i)) {
                    list.add(i);
                }
                // 多于2处,交换之后都不会相等,直接返回false
                if (list.size() > 2) {
                    return false;
                }
            }
    
            // 等于1处,,直接返回false
            if (list.size() == 1) {
                return false;
            }
    
            // 只有两处不同,则判断值是否相等
            return s1.charAt(list.get(0)) == s2.charAt(list.get(1)) && s1.charAt(list.get(1)) == s2.charAt(list.get(0));
        
        }
    
  • 相关阅读:
    MySQL学习——操作表
    MySQL学习——数据类型
    MySQL学习——操作数据库
    MySQL学习——存储引擎
    Linux网络——配置防火墙的相关命令
    查询各分类中最大自增ID
    CentOS7下Rsync+sersync实现数据实时同步
    mysql的join连接查询优化经历
    搭建nginx代理支持前端页面跨域调用接口
    Centos查看系统CPU个数、核心数、线程数
  • 原文地址:https://www.cnblogs.com/lick468/p/15999296.html
Copyright © 2020-2023  润新知