小米二面手撕算法題

今天參加小米二面,面試官讓手撕一道算法題,感覺這道算法題挺有意義的,所以還是分享出來。題目如下

這道題目的思路可能會很簡單,但是裏面的細節可能會要重視一下,我自己寫的代碼如下,代碼能夠全部通過。話不多說,直接上代碼。

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

這個判斷。其它的思想還是比較簡單的。

總結:細節問題要注意。

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