@@ -0,0 +1,9 @@
+func reverseString(s string) string {
+ n := len(s)
+ runes := make([]rune, n)
+ for _, r := range s {
+ n--
+ runes[n] = r
+ }
+ return string(runes)
+}
@@ -0,0 +1,15 @@
+var vowels map[rune]bool = map[rune]bool{'A': true, 'E': true, 'I': true, 'O': true, 'U': true, 'a': true, 'e': true, 'i': true, 'o': true, 'u': true}
+
+func reverseVowels(s string) string {
+ runes := []rune(s)
+ for l, r := 0, len(s)-1; l < r; l, r = l+1, r-1 {
+ if vowels[runes[l]] && vowels[runes[r]] {
+ runes[l], runes[r] = runes[r], runes[l]
+ } else if vowels[runes[l]] {
+ l--
+ } else if vowels[runes[r]] {
+ r++
+func intersection(nums1 []int, nums2 []int) (res []int) {
+ m := make(map[int]int)
+ for _, n := range nums1 {
+ m[n] |= 1
+ for _, n := range nums2 {
+ m[n] |= 2
+ for k, v := range m {
+ if v == 3 {
+ res = append(res, k)
+ return
@@ -0,0 +1,13 @@
+func intersect(nums1 []int, nums2 []int) (res []int) {
+ m[n]++
+ if val, ok := m[n]; ok && 0 < val {
+ m[n] = val - 1
+ res = append(res, n)
+func isPerfectSquare(num int) bool {
+ beg, end := 1, num+1
+ for beg < end {
+ mid := beg + (end-beg)/2
+ div := num / mid
+ if div == mid && div*mid == num { // 5 / 2 == 2, but 2 * 2 != 5
+ return true
+ } else if div < mid {
+ end = mid
+ } else if mid <= div {
+ beg = mid + 1
+ return false
@@ -0,0 +1,6 @@
+func getSum(a int, b int) int {
+ for b != 0 {
+ a, b = a^b, (a&b)<<1
+ return a
@@ -0,0 +1,22 @@
+/* The guess API is defined in the parent class GuessGame.
+ @param num, your guess
+ @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
+ int guess(int num); */
+public class Solution extends GuessGame {
+ public int guessNumber(int n) {
+ int beg = 1, end = n;
+ while (beg <= end) {
+ int mid = beg + (end - beg) / 2;
+ int val = guess(mid);
+ if (val == -1) {
+ end = mid - 1;
+ } else if (val == 1) {
+ beg = mid + 1;
+ } else {
+ return mid;
+ return beg;
@@ -0,0 +1,17 @@
+func canConstruct(ransomNote string, magazine string) bool {
+ m, n := len(ransomNote), len(magazine)
+ if n < m {
+ cnt := make([]int, 256)
+ for _, r := range magazine {
+ cnt[r]++
+ for _, r := range ransomNote {
+ cnt[r]--
+ if cnt[r] < 0 {
+func firstUniqChar(s string) int {
+ m := make(map[rune]int)
+ for i, r := range s {
+ if _, ok := m[r]; !ok {
+ m[r] = i
+ idx := -1
+ for i := 'a'; i <= 'z'; i++ {
+ if val := m[i]; cnt[i] == 1 && (idx == -1 || val < idx) {
+ idx = val
+ return idx
+func findTheDifference(s string, t string) byte {
+ for _, r := range t {
+ return byte(r)
+ return '0'
+func findNthDigit(n int) int {
+ nines, digits := 9, 1
+ for nines*digits < n {
+ n -= nines * digits
+ nines *= 10
+ digits++
+ num := nines/9 + (n-1)/digits
+ for i := 0; i < digits-(n-1)%digits-1; i++ {
+ num /= 10
+ return num % 10