小米二面手撕算法题

匿名 (未验证) 提交于 2019-12-03 00:03:02

今天参加小米二面,面试官让手撕一道算法题,感觉这道算法题挺有意义的,所以还是分享出来。题目如下

这道题目的思路可能会很简单,但是里面的细节可能会要重视一下,我自己写的代码如下,代码能够全部通过。话不多说,直接上代码。

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();
                }

这个判断。其它的思想还是比较简单的。

总结:细节问题要注意。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!