LeetCode learning records based on Java,Kotlin,Python...Github 地址git
序號對應 LeetCode 中題目序號github
public static String longestCommonPrefix(String[] strs) { if (strs.length == 0) { return ""; } if (strs.length == 1) { return strs[0] == null ? "" : strs[0]; } //找出數組中字符長度最短的字符串的長度(決定最多進行輪循比較的次數或者說是位數) int minLength = Integer.MAX_VALUE; for (String s : strs) { if (minLength > s.length()) { minLength = s.length(); } } boolean isCharEquals = true; int i;//記錄最後一位相等字符的位置 for (i = 0; i < minLength; i++) { for (int j = 0; j < strs.length; j++) { if (strs[0].charAt(i) != strs[j].charAt(i)) { isCharEquals = false; break; } } if (!isCharEquals) { break; } } return strs[0].substring(0, i); }
利用棧存放左括號,出現右括號時判斷棧頂的左括號是否跟當前右括號相匹配,匹配則移除棧中元素;最後檢測棧中元素是否所有被移除;數組
public boolean isValid(String s) { Stack<Character> characterStack = new Stack<>(); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(') { characterStack.push('('); } if (s.charAt(i) == '[') { characterStack.push('['); } if (s.charAt(i) == '{') { characterStack.push('{'); } if (s.charAt(i) == ')') { if (!characterStack.isEmpty() && characterStack.pop() == '(') { continue; } else { return false; } } if (s.charAt(i) == ']') { if (!characterStack.isEmpty() && characterStack.pop() == '[') { continue; } else { return false; } } if (s.charAt(i) == '}') { if (!characterStack.isEmpty() && characterStack.pop() == '{') { continue; } else { return false; } } } return characterStack.isEmpty(); }
fun isValid(s: String): Boolean { val charStack = ArrayList<Char>() for (i in s.indices) { if (s[i] == '(') { charStack.add('(') } if (s[i] == '[') { charStack.add('[') } if (s[i] == '{') { charStack.add('{') } if (s[i] == ')') { if (!charStack.isEmpty() && charStack[charStack.lastIndex] == '(') { charStack.removeAt(charStack.lastIndex) continue } else { return false } } if (s[i] == ']') { if (!charStack.isEmpty() && charStack[charStack.lastIndex] == '[') { charStack.removeAt(charStack.lastIndex) continue } else { return false } } if (s[i] == '}') { if (!charStack.isEmpty() && charStack[charStack.lastIndex] == '{') { charStack.removeAt(charStack.lastIndex) continue } else { return false } } } return charStack.isEmpty() }
題目詳細描述:給定一個排序數組,你須要在原地刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。函數
思路:從角標2開始向後遍歷,若是當前元素和前一個元素不相同,就把角標爲index的值賦值爲當前元素,index自增code
public int removeDuplicates(int[] nums) { if (nums.length == 0) { return 0; } if (nums.length == 1) { return 1; } int index = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] != nums[i - 1]) { nums[index++] = nums[i]; } } return index; }
fun removeDuplicates(nums: IntArray): Int { if (nums.isEmpty()) return 0 if (nums.size == 1) return 1 var index = 1 for (i in 1 until nums.size) { if (nums[i] != nums[i - 1]) { nums[index++] = nums[i] } } return index }