1. 程式人生 > >第一個只出現一次的字元位置

第一個只出現一次的字元位置

在一個字串(0<=字串長度<=10000,全部由字母組成)中找到第一個只出現一次的字元,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫).

public class Solution {
    public int FirstNotRepeatingChar(String str) {
       int N = str.length();       //求出待查詢字串的長度
         char[] c = new char[N];     //建立字元陣列,用於儲存字串轉化來的字元陣列
         c = str.toCharArray();
         int[] a = new int[60];         //次陣列為用於儲存對應每個字母出現次數的資訊,序號0-25對應表示a-z,序號32-57對應表示A-Z
         if( N == 1 ) {
             return 1;               //如果長度為1,則直接返回1
         }
         if(N == 0) {
             return -1;             //長度為0,則返回-1
         }
         for(int i = 0 ; i < N ; i ++) {
             if(a[c[i]-65] == 0 ) {    //如果對應字母沒有出現過,則標記為1次
                 a[c[i]-65] =1;
             }
             else if(a[c[i]-65] == 1) {    //此時該字母是第二次出現,則標記為2次
                 a[c[i]-65] =2;
             }
             else if(a[c[i]-65] == 2) {       //此時多次出現,跳過尋找下一個待查的字母
                 continue;
             }
         }
    
        int t = -1;
         for(int i = 0 ; i < N ; i ++) {          //再一次迴圈每一個元素
             if(a[c[i]-65] == 0 ) {           //如果出現0次,跳過
                 continue;
             }
             else if(a[c[i]-65] == 1) {        //剛好出現1次,把序號傳給t
                
                 t = i  ;
                 break;
             }
             else if(a[c[i]-65] == 2) {
                 continue;
             }
         }
         
         return t;
    }
}