【leetcode】 Longest Substring Without Repeating Characters

要想出O(n)的算法来解决此题,关键是确定一个良好的扫描策略,避免重复的无谓扫描。

详细分析可见http://leetcode.com/2011/05/longest-substring-without-repeating-characters.html

下面是Java实现:

import java.util.Arrays;


public class Solution {
    public int lengthOfLongestSubstring(String s) {
        // Start typing your Java solution below
        // DO NOT write main() function
    	
//    	case of empty string
    	if(s==null || s.isEmpty()==true)
    		return 0;
    	
    	int len = s.length();
    	int res = 1;
    	int start = 0, cur = 1;
    	int position[] = new int[300];
    	Arrays.fill(position, -1);
    	position[s.charAt(0)] = 0;
    	
//    	loop and find corresponding result
    	while(cur < len){
//    		s[cur] has not occurred
    		if(position[s.charAt(cur)] < start){
    			res = Math.max(cur-start+1, res);
    			position[s.charAt(cur)] = cur;
    		}
//    		s[cur] has occurred in previous substring
    		else{
    			start = position[s.charAt(cur)] + 1;
    			res = Math.max(res, cur-start+1);
    			position[s.charAt(cur)] = cur;
    		}
    		cur++;
    	}// End while loop
        return res;
    }// End method lengthOfLongestSubstring
    
} // End class Solution


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值