#力扣 LeetCode劍指 Offer 50. 第一個只出現一次的字元 @FDDLC
阿新 • • 發佈:2020-12-29
技術標籤:演算法&資料結構
題目描述:
https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/
Java程式碼:
class Solution { public char firstUniqChar(String s) { char answer=' '; int[] count=new int['z'+1]; //可以只用26個int,這裡以空間換時間 for(int i=0;i<s.length();i++)count[s.charAt(i)]++; for(int i=0;i<s.length();i++){ if(count[s.charAt(i)]==1){ answer=s.charAt(i); break; } } return answer; } }
Java程式碼二:
class Solution { public char firstUniqChar(String s) { char answer=' '; int[] count=new int['z'+1]; //可以只用26個int,這裡以空間換時間 for(int i=0,l=s.length();i<l;i++)count[s.charAt(i)]++; for(int i=0,l=s.length();i<l;i++){ if(count[s.charAt(i)]==1){ answer=s.charAt(i); break; } } return answer; } }
每次呼叫s.length()更耗時間,故優化之。
Java程式碼三:
import java.util.LinkedHashSet; import java.util.LinkedList; class Solution { public char firstUniqChar(String s) { int[] count=new int['z'+1],order=new int[Math.min(s.length(),26)]; //count可以只用26個int,這裡以空間換時間 for(int i=0,l=s.length(),ch,oi=0;i<l;i++){ ch=s.charAt(i); if(count[ch]==0)order[oi++]=ch; //order用於給每個字母首次出現的位置排序 count[ch]++; } for(int i=0;i<order.length;i++){ if(count[order[i]]==1)return (char)order[i]; } return ' '; } }