本次将Length of Last Word,Ugly Number,Power of Three,Reverse Vowels of a String 一起写解题思路。
这四道题都相当简单,整个解题思路都会很简略。
58 Length of Last Word
概述
Length of Last Word 题意是求字符串中最后一组连续非空字符的字符串长度。
分析
从字符串末尾开始向前查找,如果一直是空白字符,那么长度不应被计入。
当开始遇到非空字符,开始计算长度,直到遇到下一个空白字符,返回结果。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Solution { public int lengthOfLastWord(String s) { boolean canCount = false; int len = 0; for (int i = s.length() - 1; i >= 0; --i) { if (s.substring(i, i + 1).equals(" ")) { if (canCount) { return len; } } else { if (!canCount) { canCount = true; } ++len; } } return len; } } |
263 Ugly Number
概述
Ugly Number 即判断一个数字其因数只能由2、3、5构成。1也被认为是ugly number。
分析
直接通过循环,尝试对输入数字,分别尝试是否能够整除2、3、5,如果能除到1,说明必然是这三个数字中的1到3个相乘得到的,反之则不是。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class Solution { public boolean isUgly(int num) { if (num <= 0) { return false; } if (1 == num) { return true; } int[] factors = {2, 3, 5}; int n = num; for (int factor: factors) { while (0 == n % factor) { n /= factor; if (n == 1) { return true; } } } return false; } } |
326 Power of Three
概述
Power of Three 即判断输入数字是否是是3的n次幂。
分析
如果用循环除法,那么只需要判断能不能除到1即可。
在不使用循环的情况下,考虑到输入的数字范围仅仅是int,那么结果个数是有限的,可以通过提前算出结果,判断输入是否等于这些结果之一判断。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class Solution { public boolean isPowerOfThree(int n) { HashMap<Integer, Integer> m = new HashMap<Integer, Integer>(); m.put(1, 1); m.put(3, 1); m.put(9, 1); m.put(27, 1); m.put(81, 1); m.put(243, 1); m.put(729, 1); m.put(2187, 1); m.put(6561, 1); m.put(19683, 1); m.put(59049, 1); m.put(177147, 1); m.put(531441, 1); m.put(1594323, 1); m.put(4782969, 1); m.put(14348907, 1); m.put(43046721, 1); m.put(129140163, 1); m.put(387420489, 1); m.put(1162261467, 1); return m.containsKey(n); } } |
345 Reverse Vowels of a String
概述
Reverse Vowels of a String 需要我们完成的是交换字符串中所有元音字母的位置。
分析
如果一个字符串仅仅包含元音字母,那么对调位置其实与反转字符串操作等同。
可以考虑抽取所有的元音字母组成一个字符串,反转之后重新遍历字符串,遇到元音字母替换即可。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
public class Solution { public String reverseVowels(String s) { HashMap<String, Boolean> vowels = new HashMap<String, Boolean>(); vowels.put("a", true); vowels.put("e", true); vowels.put("i", true); vowels.put("o", true); vowels.put("u", true); vowels.put("A", true); vowels.put("E", true); vowels.put("I", true); vowels.put("O", true); vowels.put("U", true); String allVowels = ""; StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); ++i) { char c = s.charAt(i); if (vowels.containsKey(c + "")) { sb.append(c); } } String reversedVowels = sb.reverse().toString(); int reversedIdx = 0; StringBuilder result = new StringBuilder(); for (int i = 0; i < s.length(); ++i) { char c = s.charAt(i); if (vowels.containsKey(c + "")) { result.append(reversedVowels.charAt(reversedIdx)); ++reversedIdx; continue; } result.append(c); } return result.toString(); } } |