• 每日一题 为了工作 2020 0418 第四十七题


    /**
     * 【问题】
     *      数组中两个字符串的最小距离
     *      给定一个字符串数组strs,在给定两个字符串str1和str2,返回在strs中str1与
     *  str2的最小距离,如果str1或str2为null或者不在strs中则返回-1.
     * 【举例】
     *      strs=["1","3","3","3","2","3","l "], strl="l", str2="2", 返回2。
     *      strs=["CD"], str1="CD", str2="AB", 返回-1。
     * 【解答】
     *      从左到右遍历strs, 用变量last1记录最近一次出现的strl的位置,用变量last2
     * 记录最近一次出现的str2的位置。如果遍历到strl, 那么i-last2的值就是当前的strl和左
     * 边最它最近的str2之间的距离。如果遍历到str2, 那么i-lastl的值就是当前的str2和左边
     * 最它最近的strl之间的距离。用变量min记录这些距离的最小值即可。
     *
     * @author 雪瞳
     */
    

      

    public class MinDistance {
    
        public static int minDistance(String strs[],String str1,String str2){
    
            if (str1==null || str2==null){
                return -1;
            }
            if (str1.equals(str2)){
                return 0;
            }
            int last1 = -1;
            int last2 = -1;
            int min = Integer.MAX_VALUE;
    
            for (int i=0;i<strs.length;i++){
                if (strs[i].equals(str1)){
                    min = Math.min(min,last2 == -1?min:i-last2);
                    last1 = i;
                }
                if (strs[i].equals(str2)){
                    min = Math.min(min,last1 == -1?min:i-last1);
                    last2 = i;
                }
            }
    
            return min == Integer.MAX_VALUE?-1:min;
        }
    
        public static void main(String[] args) {
            String[] strs=new String[]{"1","3","3","3","2","3","l"};
            String strl="l";
            String str2="2";
            int result = minDistance(strs, strl, str2);
            System.out.println(result);
        }
    }
    

      

  • 相关阅读:
    Python:Pandas的基本操作和使用
    奇技淫巧:绝佳笔记篇-wolai
    Scala:(五) 类、对象、继承、模式匹配和样例类
    tree2List
    java mybatis多层collection嵌套查询
    linux 查看目录下各个文件的大小
    Redisson使用手册
    hutool 定时任务 TimedCache
    清理Docker占用的磁盘空间
    java线程池
  • 原文地址:https://www.cnblogs.com/walxt/p/12725409.html
Copyright © 2020-2023  润新知