BasedLeetCode
LeetCode learning records based on Java,Kotlin,Python...Github 地址
序號對應(yīng) LeetCode 中題目序號
14 編寫一個函數(shù)來查找字符串?dāng)?shù)組中最長的公共前綴字符串
- Java 語言實現(xiàn)
public static String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
if (strs.length == 1) {
return strs[0] == null ? "" : strs[0];
}
//找出數(shù)組中字符長度最短的字符串的長度(決定最多進(jìn)行輪循比較的次數(shù)或者說是位數(shù))
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);
}
- Kotlin 語言實現(xiàn)
20 給定一個只包括 '(',')'离唐,'{'狸涌,'}'畦粮,'['娄猫,']' 的字符串卓起,判斷字符串是否有效
利用棧存放左括號兴蒸,出現(xiàn)右括號時判斷棧頂?shù)淖罄ㄌ柺欠窀?dāng)前右括號相匹配衫生,匹配則移除棧中元素裳瘪;最后檢測棧中元素是否全部被移除;
- Java 語言實現(xiàn)
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();
}
- Kotlin 語言實現(xiàn)
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()
}
26 刪除排序數(shù)組中的重復(fù)項
題目詳細(xì)描述:給定一個排序數(shù)組罪针,你需要在原地刪除重復(fù)出現(xiàn)的元素彭羹,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度泪酱。
不要使用額外的數(shù)組空間派殷,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。
思路:從角標(biāo)2開始向后遍歷墓阀,如果當(dāng)前元素和前一個元素不相同毡惜,就把角標(biāo)為index的值賦值為當(dāng)前元素,index自增
- Java 語言實現(xiàn)
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;
}
- Kotlin 語言實現(xiàn)
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
}