题目:
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;
}
}
已自我验证,如果有疑问或质疑代码的请评论,谢谢 !!