(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 }
View Code

代码二如下:

1 public int lengthOfLastWord(String s) {
2     return s.trim().length()-s.trim().lastIndexOf(" ")-1;
3 }
View Code

注意: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 }
View Code

(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 }
View Code

注意:

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位开始;