새로운 문자 스트림은 첫 번째 문자를 반복하지 않습니다

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/mengmengkuaipao/article/details/102761780

사용의 HashMap

입력 순서의 출력 순서를 사용의 LinkedHashMap

의 HashMap과의 LinkedHashMap 차이

HashMap의 장애,의 LinkedHashMap 저장소 입력 순서

import java.util.*;
public class Solution {
    //Insert one char from stringstream
    Map<Character,Integer > map=new LinkedHashMap<>();
    public void Insert(char ch)
    {
        if(map.containsKey(ch)){
            map.put(ch,map.get(ch)+1);
        }
        else 
            map.put(ch,1);
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        for(Map.Entry<Character,Integer > set:map.entrySet()){
            if(set.getValue()==1)
                return set.getKey();
        }
        return '#'; //char型要加单引号‘ ’
    }
}

순회의 해시 맵

for(Map.Entry<Character,Integer > set:map.entrySet()){
     if(set.getValue()==1)
          return set.getKey();
}

입력 순서 순회 해시 맵

  1. 상기 LinkedListMap 사용하여
    통상적 인 방법으로하면 횡단
  2. 종래의 HashMap으로
    ArrayList를 배열 값에 대응하는 배열을 통해지도를보고 주문을 기록 할 때
import java.util.*;
public class Solution {
    //Insert one char from stringstream
    HashMap<Character,Integer>  map = new HashMap<> (); 
    ArrayList<Character> list=new ArrayList<>();
    public void Insert(char ch)
    {
        if(map.containsKey(ch))
            map.put(ch,map.get(ch)+1);
        else
            map.put(ch,1);
        list.add(ch);
        
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        for(char key:list){
            if(map.get(key)==1)
                return key;
        } 
        return '#';
    }
}

참고 :

for(char key:list){
    if(map.get(key)==1)
         return key;
} 

형식합니다! ! !

  1. 아날로그와 해시 맵 배열
    기록 StringBuffer를 횡단하여 문자열 쉬운지도의 입력 값

아날로그의 HashMap의 배열

캐릭터는 8 회계, 따라서 256, 256는 간단한 해시 테이블을 달성하기 위해 어레이의 사이즈를 적용 할 수 없을 것이다. 시간 복잡도는 O (n)은, O (N)의 공간적 복잡도이다.

public class Solution {
    //Insert one char from stringstream
    int[] ans = new int[256];
    
    StringBuffer s=new StringBuffer(); 
    
    public void Insert(char ch)
    {
        s.append(ch);
        if(ans[ch]==0)
            ans[ch]=1;
        else
            ans[ch]++;
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        char[] res=s.toString().toCharArray(); //先转换为字符串再转化为数组
        for(char r:res){
            if(ans[r]==1)
                return r;
        }
        return '#';
    }
}

문자열, StringBuffer를, char 배열 변환

추천

출처blog.csdn.net/mengmengkuaipao/article/details/102761780