程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 在英文字符串中找第一個最長不含重復字符的子串高效實現(修改版)

在英文字符串中找第一個最長不含重復字符的子串高效實現(修改版)

編輯:關於C

找工時候練習寫的代碼。翻出來了。
今天有朋友指出來程序運行結果錯誤,試了下,果然有問題,在下班途中重新整理了思路,修改了代碼,整體思路不變,就是加了幾行代碼,處理字符串的最後部分。求驗證結果。
順便問下,怎麼取消文章被評論時收到系統通知的郵件呢?

char*GetSubStr( const char*str )
{
    int hash[256]; //hash記錄每個字符的出現位置
    int i;
    for( i = 0;i<256;i++ )
        hash[i]=-1;
    int CurrentStart=0,MaxStart=0,MaxEnd=0,MaxLength =0,CurrentLength = 0,strLen = strlen(str);
    for(i=0;i<strLen;i++)
    {
        if(CurrentStart>hash[str[i]]) //如果沒有重復
        {
            hash[str[i]]=i;
        } www.2cto.com
        else
        {
            CurrentLength=i-CurrentStart; //當前長度
            if(CurrentLength>MaxEnd-MaxStart)//如果當前長度最長
            {
               MaxEnd=i;
               MaxStart=CurrentStart;
            }
            CurrentStart=hash[str[i]]+1; //更新當前最長的起點
            hash[str[i]]=i; //更新字符出現的位置
        }
    }
    //增加的代碼
    if( strLen - CurrentStart> CurrentLength)
    {
        MaxEnd = strLen;
        MaxStart=CurrentStart;
    }
    //
    MaxLength=MaxEnd-MaxStart;
    char*reStr = new char[MaxLength+1];
    reStr[MaxLength]=0;
    memcpy( reStr,str+MaxStart,MaxLength );
    return reStr;
}
作者:ifeng

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved