• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            jake1036

            面試100 13第一個只出現(xiàn)一次的字符

                             第一個只出現(xiàn)一次的字符

              方法1 :
                        第一個只出現(xiàn)一次的字符。
                       (1)考慮使用一個hash表,將各個字符映射到表中,然后表中存儲有該字符出現(xiàn)的次數(shù),以及首次出現(xiàn)的下標。
                       (2)映射完成之后,掃描hash數(shù)組查找出現(xiàn)次數(shù)為1的字符,并且其首次出現(xiàn)下標為最小。

                缺點:
                      需要存儲首次出現(xiàn)的下標,造成存儲位置浪費。
                      
            #include <iostream>
            #include 
            <vector>
            #include 
            <iterator>
              
            using namespace std ;
             
              
            struct Value{
                 
            int times ;
                 
            int index ;        
              }
             ;
              
            const int N = 26 ;
              
            const int MAX = 66536 ;
              
            int hashstr(char * s , Value * list )
              
            {
                   
            int i = 0 ;
                   
            int index = MAX ;
                   
                  
            if(s == 0
                    
            return index;
                    
                  
            while(*!= '\0')
                    
            {
                      list[
            *s-'a'].times++ ;
                      
            if(list[*s-'a'].index == -1//若是首次出現(xiàn)下標,則統(tǒng)計 
                        list[*s-'a'].index = i ;           
                        i
            ++;
                        s
            ++;
                    }

                      
                   
                   
            for(i = 0 ;i < N ; i++)
                   
            {
                     
            if(list[i].times == 1)
                        
            {
                          
            if(index > list[i].index)   //求最小的下標       
                           index = list[i].index ;                     
                        }
                   
                   }

                   
            return index ;
              }

             
              
            int main()
              
            {
                
            int i ;
              
                
            char s[] = "wabacckdeffbzw" ; 
                Value  list[N] ;
               
                 
            for(i = 0;i < N ;i++)
                 
            {
                   list[i].times 
            = 0 ;
                   list[i].index 
            = -1 ;                     
                 }
             
               
                
            int index = hashstr(s , list) ;
                
            if(index == MAX)
                   cout
            <<"error"<<endl ;
                 
            else
                   cout
            <<s[index]<<endl ;
                    
                system(
            "pause") ;
                
            return 0 ;    
              }

              



              方法2 :

                建立一個長度為256的hash數(shù)組,掃描到對應(yīng)的字符,即更新hash表內(nèi)存儲出現(xiàn)的次 數(shù)。
             需要兩次掃描字符串,第一次掃描統(tǒng)計字符串的出現(xiàn)次數(shù),第二次掃描確定出現(xiàn)一次的字符及其位置 ,比方法1,比較省空間。 
             
              代碼如下:
               
            #include <iostream>
             
            using namespace std ;
             
            const int N = 256 ;
             
             
            void hashstr(char * s , int * a)
             
            {
                
            char * p = s ;   
                
            while(*p)
                
            {
                  a[
            *p]++ ; //自增       
                  p++ ;         
                }
              
                
                
            while(*s) //掃描第二遍,當掃描都出現(xiàn)次數(shù)為1的字符,即停止 
                {
                  
            if(a[*s] == 1)
                  
            {
                    cout
            <<*s ;
                    
            break
                  }

                  s
            ++ ;         
                }

                
                  
             }

             
             
            int main()
             
            {
               
            char s[] = "wabacckdeffbz" ;
               
            int  a[N] ;
               memset(a , 
            0 , sizeof(a)) ;
               hashstr(s , a) ;
               system(
            "pause") ; 
               
            return 0 ;    
             }





            posted on 2011-05-17 10:25 kahn 閱讀(524) 評論(0)  編輯 收藏 引用 所屬分類: 算法相關(guān)

            久久精品一区二区三区AV| 国产精品成人久久久久久久| 久久涩综合| 国内精品久久久久久久久电影网 | 久久综合久久综合久久| 99久久久久| 久久免费看黄a级毛片| 国产精品久久久久…| 婷婷久久综合| 日韩一区二区久久久久久 | 性高湖久久久久久久久AAAAA| 囯产极品美女高潮无套久久久| 久久综合久久久| 久久国产精品99国产精| 色婷婷久久综合中文久久一本| 国产精品99久久精品| 狠狠色丁香久久婷婷综合| 久久久WWW成人| 色综合久久最新中文字幕| 久久精品aⅴ无码中文字字幕不卡| 国产精品久久久久久搜索| 久久亚洲精品国产精品婷婷| 久久久国产精品网站| 国产成人久久精品一区二区三区| 一本一道久久a久久精品综合| 久久91精品综合国产首页| 久久国产精品99精品国产| 亚洲香蕉网久久综合影视| 亚洲人成无码久久电影网站| 久久国产成人| 久久亚洲AV无码西西人体| 欧美777精品久久久久网| 国产精品一久久香蕉国产线看| 亚洲国产一成人久久精品| 久久亚洲国产成人影院| 久久婷婷五月综合色奶水99啪| 欧美久久综合九色综合| 久久嫩草影院免费看夜色| 欧美激情精品久久久久久| 天天影视色香欲综合久久| 99久久免费国产精品特黄|