1. 程式人生 > >LeetCode-Algorithms #003 Longest Substring Without Repeating Characters, Database #177 Nth Highest Salary

LeetCode-Algorithms #003 Longest Substring Without Repeating Characters, Database #177 Nth Highest Salary

LeetCode-Algorithms #003 Longest Substring Without Repeating Characters

 對於給定的字串, 找出其每個字元都不重複的子串中最長的那個, 並返回該子串的長度:

想法還是遍歷:

 1 class Solution {
 2     public int lengthOfLongestSubstring(String s) {
 3         // 如果s是null或空串, 就直接返回0
 4         if (s == null || "".equals(s))
 5             return 0;
 6         //
定義結果max 7 int max = 1; 8 // 定義遍歷中用到的變數,表示要找的子串開始和結束的index 9 int start = 0, end = 1; 10 // 把s轉為字元陣列 11 char[] arr = s.toCharArray(); 12 // 遍歷陣列,子串的開始從原陣列的第一個字元到倒數第二個字元 13 for (start = 0; start < arr.length - 1; start++) { 14 // end從start的下一個開始,到最後一個結束
15 // 建立一個HashSet用於儲存和檢驗子串 16 HashSet<Character> sub = new HashSet<>(); 17 // 把start位置的字元新增進HashSet 18 sub.add(arr[start]); 19 // 從start後面一個字元開始檢驗 20 for (end = start + 1; end < arr.length; end++) { 21 // 如果end成功新增,證明沒有重複,繼續遍歷,反之終止迴圈,繼續下一個start
22 if (sub.add(arr[end])) { 23 } else { 24 break; 25 } 26 } 27 //如果本處開始的子串比max大就更新max 28 max = max>sub.size()? max : sub.size(); 29 } 30 return max; 31 } 32 }

一看就知道效率很低, 等於是把所有不重複的子串都找出來比了一下, 好在一次通過:

當然成績也是慘不忍睹