[phone]找连续字符组成的substring的组成char

本文介绍了一种改进的双指针算法,用于寻找字符串中的最长重复子串,通过减少内存使用和优化循环来提升效率。具体实例包括输入字符串 'thiisiissoodd' 和 'thiiissisoodd' 的处理过程。

其实是个很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;

	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值