日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2019-03-18-算法-进化(字符串中的第一个唯一字符)

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019-03-18-算法-进化(字符串中的第一个唯一字符) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
給定一個字符串,找到它的第一個不重復的字符,并返回它的索引。如果不存在,則返回 -1。

案例:

s = "leetcode" 返回 0.s = "loveleetcode", 返回 2.

注意事項:您可以假定該字符串只包含小寫字母。

思路1:暴力破解法,時間復雜度:O(n^2),空間復雜度O(1)

/*** 思路1:暴力破解* @param s* @return*/ public int firstUniqChar(String s) {if(s.length()==1) {return 0;}for(int i=0;i<s.length();i++) {int j=0;for(j=0;j<s.length();j++) {if(j==i) {continue;}if(s.charAt(i) ==s.charAt(j)) {break;}else if (j == s.length()-1) {return i;}}if(i == s.length()-1 && j == s.length()) {return s.length()-1;}}return -1;}

思路2

/*** 思路2:* 1:統計每個字母出現的次數(HashMap,key為char,value=次數)* 2:查找僅出現一次的元素* 時間復雜度O(n)* 空間復雜度O(1)* @param s* @return*/public int firstUniqChar(String s) {Map<Character, Integer> map = new HashMap<Character, Integer>();for(int i=0;i<s.length();i++) {map.put(s.charAt(i), map.get(s.charAt(i))==null?1:map.get(s.charAt(i))+1);}for(int i=0;i<s.length();i++) {if(map.get(s.charAt(i)) ==1) {return i;}}return -1;}

思路3
當前最佳

/*** 思路3:利用其只有小寫字母,特別定制版。* 開一個26位字母表,元素初始化為n(n>s.length())。然后遍歷s,每個字符去查找字母表,如果為n,則置為字符的index,如果不為n,則置為n+1.* 最終,字母表最小的元素就是答案* 時間復雜度O(n),空間復雜度O(1)* @param s* @return*/public int firstUniqChar(String s) {if(s.length() == 1) {return 0;}int len = s.length();int[] arr = new int[26];for(int i=0;i<arr.length;i++) {arr[i] = len;}for(int i=0;i<len;i++) {int index = s.charAt(i) - 'a';if(arr[index] == len) {arr[index] =i;}else if (arr[index] < len) {arr[index] =len+1;}}int min =len;for(int item:arr) {if(item < min) {min=item;}}return min<len?min:-1;}

總結

以上是生活随笔為你收集整理的2019-03-18-算法-进化(字符串中的第一个唯一字符)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。