编程题(JAVA实现)

题目:

1·.有一个字符串A,有一个字符串B,想要从A转换到B,只能一次一次转换,每次转换要把字符串A中的一个字符全部转换成另外一个字符。求字符串A能不能转换成字符串B。 例如: “abc” -> "bbc" -> "ddc" (判断转换是否成立)。

import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
class Test {
    public static void main(String[] args) {
        String s1 = "aaaeef";
        String s2 = "eeeaaa";
        
        System.out.println(isConverted(s1, s2));
    }

    public static boolean isConverted(String s1, String s2) {
        if(s1.length()!=s2.length()){return false;}
        Map<Character,List<Integer>> map = new HashMap<Character,List<Integer>>();
        Integer index = 0;
        for(Character ch : s1.toCharArray()){
            if(map.containsKey(ch)){
                map.get(ch).add(index);
            }else{
                List<Integer> list = new ArrayList<Integer>();
                list.add(index);
                map.put(ch,list);
            }
            index++;
        }
        
        List<List<Integer>> valuesList = new ArrayList<List<Integer>>(map.values());
        Character character = null;
        for(List<Integer> indexList : valuesList){
            for(Integer index1 : indexList){
                if(character!=null&&!character.equals(s2.charAt(index1))){
                    return false;
                }else{
                    character = s2.charAt(index1);
                }
            }
            character = null;
        }
        return true;
    }

}

2.目前你正在领导团队开发一款新软件。你在检查项目的时候发现最后一个版本的测试没有通过,并且你知道只要上一个版本有错误,此版本的每一个下面版本都会是错误的。 假设你有S个版本数组【1,2,3,4...,S】,你想找出最早发生错误的版本。假设查找版本的API是 IsBug(Sn) 传入版本号就会返回该版本是否有错误。 请使用API写一个函数用尽量少的步骤找出这第一个出错的版本号。

解答:

class Untitled {
    public static void main(String[] args) {
        System.out.println(binaryFind(20));
    }

    public static Integer binaryFind(Integer currentV) {
        int low = 0 ;
        int high = currentV;
        while(low<high){
            int mid = (high + low)/2 ;
            if(isBug(mid)){
                high=mid;
            }else{
                low=mid+1;
            }    
        }
        return high;
        
    }

    public static Boolean isBug(Integer v) {
        //假设10以后的都是BUG版本
        if(v != null && v >=10){return true;}
        return false;
    }
}

 

已自我验证,如果有疑问或质疑代码的请评论,谢谢  !!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值