小米二面手撕算法题

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

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

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

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

总结:细节问题要注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章