小米二面手撕算法题
作者:互联网
今天参加小米二面,面试官让手撕一道算法题,感觉这道算法题挺有意义的,所以还是分享出来。题目如下
这道题目的思路可能会很简单,但是里面的细节可能会要重视一下,我自己写的代码如下,代码能够全部通过。话不多说,直接上代码。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String sb ="";
//StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
char[] ch = s.toCharArray();
for(int i = 0;i<ch.length;i++){
if(ch[i]>='0' && ch[i]<='9'){
sb1.append(ch[i]);
}else{
if(sb1.length()>sb.length()){
sb = sb1.toString();
}
sb1.delete(0, sb1.length());
}
if(i == ch.length -1 && sb1.length()>0){
if(sb1.length()>sb.length()){
sb = sb1.toString();
}
}
}
System.out.println(sb);
}
我刚开始是定义了两个StringBuilder,但是如果我sb = sb1的时候,存在一个引用的问题,浅拷贝可能会导致sb的值为null,所以采用的是一个String,一个StringBuilder来进行计算。还有一个需要注意的点是当我最后一个字符是数字的时候,如果最后的数字序列是最长的字符序列,当我遍历到最后一个字符的时候,如果是数字的话,并且如果不加if判断的话,会直接跳过返回的是之前的最长的子串,所以最后要加if(i == ch.length -1 && sb1.length()>0){
if(sb1.length()>sb.length()){
sb = sb1.toString();
}
这个判断。其它的思想还是比较简单的。
总结:细节问题要注意。
标签:sb1,二面,String,StringBuilder,length,算法,ch,sb,小米 来源: https://blog.csdn.net/qq_37764098/article/details/100746727