zoukankan      html  css  js  c++  java
  • 最长不含重复字符的子字符串

    题目:

    请从字符串中找出一个最长的不含重复字符串的子字符串,计算该最长子字符串的长度。假设字符串中只包含'a'-'z'的字符。

    解答:

     1 public class Solution {
     2 
     3     public static void main(String[] args) {
     4         String str "arabcacfr";
     5         System.out.println(findLongestSubstringLength(str));
     6     }
     7 
     8     public static int findLongestSubstringLength(String str) {
     9         if(str == null || str.equals("")) {
    10             return 0;
    11         }
    12 
    13         int maxLength = 0;
    14         int curLength = 0;
    15 
    16         int[] positions = new int[256];
    17         for(int i = 0; i < positions.length; i++) {
    18             positions[i] = -1;
    19         }
    20 
    21         for(int i = 0; i < str.length(); i++) {
    22             int curChar = str.charAt(i) - 'a';
    23 
    24             int prePosition = positions[curChar];
    25             int distance = i - prePosition;
    26 
    27             // 第一次出现或前一个非重复子字符串不包含当前字符
    28             if(prePosition < 0 || distance > curLength) {
    29                 curLength++;
    30             } else {
    31                 if(curLength > maxLength) {
    32                     maxLength = curLength;
    33                 }
    34 
    35                 curLength = distance;
    36             }
    37 
    38             positions[curChar] = i;
    39         }
    40 
    41         if(curLength > maxLength) {
    42             maxLength = curLength;
    43         }
    44 
    45         return maxLength;
    46     }
    47 }

  • 相关阅读:
    7 重排序与happens-before
    6 Java内存模型基础知识
    5 Java线程间的通信
    Java线程的状态及主要转化方法
    《The Boost C++ Libraries》 第一章 智能指针
    python通过swig调用静态库
    使用gdb调试
    Rsync服务部署使用
    UNP学习总结(二)
    read()函数的困惑
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10481158.html
Copyright © 2011-2022 走看看