(1) Length of Last Word
解题思路:使用length记录最后一个单词的长度。从最后一个字符开始,如果是空字符,length不变。如果不是空字符,length++,直到再次遇到空字符就结束,返回length。
代码一如下:
1 public class Solution { 2 public int lengthOfLastWord(String s) { 3 int length = 0; 4 char[] chars = s.toCharArray(); 5 for (int i = s.length() - 1; i >= 0; i--) { 6 if (length == 0) { 7 if (s.charAt(i) == ' ') { 8 continue; 9 } else { 10 length++; 11 } 12 } else { 13 if (s.charAt(i) == ' ') { 14 break; 15 } else { 16 length++; 17 } 18 } 19 } 20 return length; 21 } 22 }
代码二如下:
1 public int lengthOfLastWord(String s) { 2 return s.trim().length()-s.trim().lastIndexOf(" ")-1; 3 }
注意:s.trim()返回调用字符串对象的一个副本,所有起始和结尾的空格都被删除。
(2)Valid Parentheses
解题思路:使用后进先出的堆栈stack。如果遇到左半部分的括号全部进栈(push),遇到右半部分的括号匹配出栈(pop)。如果栈为空证明完全匹配。
代码如下:
1 public class Solution { 2 public boolean isValid(String s) { 3 Stack<Character> stack = new Stack<Character>(); 4 for (int i = 0; i < s.length(); i++) { 5 if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') 6 stack.push(s.charAt(i)); 7 // Check stack for corresponding closing parentheses, false if not valid 8 else if(s.charAt(i) == ')' && !stack.isEmpty() && stack.peek() == '(') 9 stack.pop(); 10 else if(s.charAt(i) == ']' && !stack.isEmpty() && stack.peek() == '[') 11 stack.pop(); 12 else if(s.charAt(i) == '}' && !stack.isEmpty() && stack.peek() == '{') 13 stack.pop(); 14 else 15 return false; 16 } 17 return stack.isEmpty(); 18 } 19 }
(3)Longest Common Prefix
解题思路:题目大意是找出字符串数组中所有字符串的公共前缀。首先将第一个字符串设为前缀,然后使用indexof判断它是否是第二个字符串的前缀,如果是就继续判断第三个,如果不是就截取prexie的长度减一,还不是继续截取,直到是为止。
代码如下:
1 public class Solution { 2 public String longestCommonPrefix(String[] strs) { 3 if (strs.length == 0) 4 return ""; 5 String prefix = strs[0]; 6 for (int i = 1; i < strs.length; i++) { 7 while (strs[i].indexOf(prefix) != 0) { //prefix不是strs[i]的前缀 8 prefix = prefix.substring(0,prefix.length()-1);//截取prefix 9 } 10 } 11 return prefix; 12 } 13 }
注意:
int indexOf(int ch,int fromIndex)函数:就是字符ch在字串fromindex位后出现的第一个位置.没有找到返加-1
eg:String str="a2dfcfar1bzvb";
System.out.println(str.indexOf(97,2));
看这个例子,输出:6
a的ASCII为97,就从d开始找a找到了输出a所在字符串的确切位置,找不到就输出-1!(java中位置第一个从0开始)
String.indexOf函数用法小结
1. indexOf的参数是String, startIndex: Number;
indexOf的返回值为int,
2. Function indexOf 包含如下几个格式:
1). Strng.indexOf(substring) //搜索String中的substring,默认从0位开始;
2). String.indexOf(substring, int m) //搜索String中的substring, 默认从第m位开始;