[phone]找連續字符組成的substring的組成char

其實是個很easy的問題,但是當時的code就是寫的很垃圾,提示再三才寫了這麼一個code,應該還有可以improve的空間。

典型的雙指針問題,一前一後找substring,這裏要考慮如何節省空間,儘可能的少存解。要求 one loop

例如 abcdefg....xyzz 

input"thiisiissoodd", returns i i s o d 

input2 "thiiissisoodd" return i



public static ArrayList<Character> longestSubstr2(String s){
		int maxlen = 0;
		ArrayList<Character> res = new ArrayList<Character>();

		if(s == null || s.length() == 0) return res;
		if(s.length() == 0){
			res.add(s.charAt(0));
			return res;
		}
		//two pointer to loop
		int prev = 0;

		for(int i = 1; i <= s.length(); i++){
			//pay attention to last

			if(i < s.length() &&s.charAt(i) != s.charAt(prev) ){
				//update
				if(i - prev  > maxlen){
					//only put in map if > maxlen
					res = new ArrayList<Character>();
				}
				maxlen = Math.max(maxlen, i - prev );
				if(i - prev == maxlen) res.add(s.charAt(prev));
				prev = i;
			}else if(i == s.length()){
				if(i - prev  > maxlen){
					//only put in map if > maxlen
					res = new ArrayList<Character>();
				}
				maxlen = Math.max(maxlen, i - prev );
				if(i - prev == maxlen) res.add(s.charAt(prev));
				
			}
		}
		
		return res;

	}




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