Given two binary strings a and b, return their sum as a binary string.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
Constraints:
1 <= a.length, b.length <= 104
a and b consist only of '0' or '1' characters.這就是基本的陣列從尾端進行加總,最後如果有需要進位再重新建立新陣列,不過這邊有嘗試新方法,因為它是字串,可以先建立長度+1的陣列,最後再取子字串。
Runtime: 1 ms (100%)
Memory Usage: 41.1 MB (73.06%)
class Solution {
    public String addBinary(String a, String b) {
        char[] ac = a.toCharArray(), bc = b.toCharArray();
        int carry = 0, acl = ac.length, bcl = bc.length;
        char[] result = new char[(acl > bcl ? acl : bcl) + 1];
        for (int i = result.length - 1; i >= 0; i--) {
            if (acl > 0 && bcl > 0) {
                carry = (ac[--acl] + bc[--bcl] + carry) % 48;
            } else if (acl > 0 && bcl <= 0) {
                carry = (ac[--acl] + carry) % 48;
            } else if (acl <= 0 && bcl > 0){
                carry = (bc[--bcl] + carry) % 48;
            }
            if (carry > 1) {
                result[i] = carry == 2 ? '0' : '1';
                carry = 1;
            } else {
                result[i] = carry == 1 ? '1' : '0';
                carry = 0;
            }
        }
        String str = new String(result);
        if (result[0] == '0') {
            return str.substring(1);
        } else {
            return str;
        }
    }
}
Given two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = "sadbutsad", needle = "sad"
Output: 0
Explanation: "sad" occurs at index 0 and 6.
The first occurrence is at index 0, so we return 0.
Example 2:
Input: haystack = "leetcode", needle = "leeto"
Output: -1
Explanation: "leeto" did not occur in "leetcode", so we return -1.
Constraints:
1 <= haystack.length, needle.length <= 10^4
haystack and needle consist of only lowercase English characters.這題在LeetCode Problem 找不到,應該是只有在Explore Card 有的題目,不過也很簡單,只要判斷子字串在主字串的起始位置就好了。
Runtime: 0 ms (100%%)
Memory Usage: 40.2 MB (74.75%)
class Solution {
    public int strStr(String haystack, String needle) {
        char[] haystackChar = haystack.toCharArray(), needleChar = needle.toCharArray();
        int haystackSize = haystackChar.length, needleSize = needleChar.length;
        if (haystackSize < needleSize) return -1;
        int i, j;
        for (i = 0; i < haystackSize; i++) {
            if (haystackSize - i < needleSize) break;
            if (haystackChar[i] == needleChar[0]) {
                for (j = 0; j < needleSize; j++) {
                    if (haystackChar[i + j] != needleChar[j]) break;
                }
                if (j == needleSize) return i;
            }
        }
        return -1;
    }
}
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".
Example 1:
Input: strs = ["flower","flow","flight"]
Output: "fl"
Example 2:
Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
Constraints:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] consists of only lowercase English letters.這邊Java 可以使用StringBuilder 去組答案,只要從頭開始遍歷就可以了,如果中間有比較短的字串就catch 例外不處理。
Runtime: 1 ms (82.93%)
Memory Usage: 39.9 MB (91.19%)
class Solution {
    public String longestCommonPrefix(String[] strs) {
        int size = strs.length;
        if (size == 1) return strs[0];
        StringBuilder sb = new StringBuilder();
        char temp;
        int firstSize = strs[0].length(), i = 0, j = 1;
        try {
            for (i = 0; i < firstSize; i++) {
                temp = strs[0].charAt(i);
                for (j = 1; j < size; j++) {
                    if (temp != strs[j].charAt(i)) break;
                }
                if (j != size) break;
                else sb.append(temp);
            }
        } catch (StringIndexOutOfBoundsException e) {
            // to nothing
        }
        return sb.toString();
    }
}