문자 흐름 의 첫 번 째 중복 되 지 않 는 문자 (사고 와 실현)

제목 설명
문자 흐름 에서 첫 번 째 로 한 번 만 나타 나 는 문 자 를 찾 는 함 수 를 실현 하 십시오.예 를 들 어 문자 흐름 에서 앞의 두 글자 인 'go' 만 읽 을 때 첫 번 째 로 한 번 만 나타 나 는 문 자 는 'g' 입 니 다.이 문자 흐름 에서 앞의 여섯 글자 인 'google' 을 읽 을 때 첫 번 째 로 한 번 만 나타 나 는 문 자 는 'l' 입 니 다.
생각:
사실 이 문제 의 주 된 사 고 는 하나의 배열 을 이용 하 는 것 입 니 다. 그리고 배열 의 아래 표 시 는 바로 이 문자 에 대응 하 는 정수 입 니 다. 이렇게 한 글자 가 들 어 오 면 먼저 이 문 자 를 Stringbuffer 에 넣 습 니 다. 이 문 자 는 배열 에 표 시 된 값 이 있 는 지, 있 는 지, 있 는 지 를 판단 하고 없 으 면 바로 1 로 설정 합 니 다. 그 다음 에 이 Stringbuffer 를 변환 합 니 다.하나의 문자 배열 을 위해 이 배열 은 들 어 오 는 순서 입 니 다. 그리고 이 배열 을 옮 겨 다 니 며 모든 문자 가 원본 배열 에 저 장 된 것 이 1 인지 아 닌 지 를 판단 합 니 다. 첫 번 째 문 자 를 찾 으 면 이것 은 처음으로 나타 난 문자 입 니 다.
실현:
public class Solution {
    //            ,                 
    //Insert one char from stringstream
    int[] hashTable = new int[256];//        8   ,         256 
    StringBuffer buffer = new StringBuffer();
    public void Insert(char ch)
    {
        buffer.append(ch);
        if(hashTable[ch] == 0){
            hashTable[ch] = 1;
        }else{
            hashTable[ch] = hashTable[ch] + 1;
        }
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        char[] temp = buffer.toString().toCharArray();
        for(char ch: temp){
            if(hashTable[ch] == 1){
                return ch;
            }
        }
        return '#';
    }
}

좋은 웹페이지 즐겨찾기