思路看了就懂了,
不过强调几个点。
首先是ans在循环时候就应该知道,当ans = “”只要有一次,就直接跳出循环。,后面没有任何对比的意义了
ans和strs[]中数据进行比较时候,只要有一个前缀没对上,就应该立刻跳出循环,因为没有对比的意义了。
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null){
return "";
}
String temp = strs[0];
for(int i = 1;i < strs.length;i++){
int j = 0;//后面要用,所以定义在这里
for(;j < temp.length() && j < strs[i].length();j++){
if(strs[i].charAt(j) != temp.charAt(j)){
break;//直接跳出循环
}
}
temp = temp.substring(0,j);//将字符串截取下来
if(temp.equals("")){
return temp;//一次循环结束后倘若temp为""直接跳出循环
}
}
return temp;
}
}
方法1
用一个栈来处理
栈里遇到一个(就保存一下下标,然后遇到一个),就将上一个保存好的下标弹出去,这样就组成了一个()两个加在一起就是一个(),翻转()里面的数据,记住是在数组上用双指针翻转,翻转之后将字符串中所有()去除。
将所有数据加进一个StringBUffer里面,SB功能很齐全,能插入,能翻转,比较省事。
1.用栈来帮助协调一切东西。
1.SB里先装字符,一个个装进去,一旦遇到
(
就把sb中东西扔进栈里,说明到时候用来返回到
遇到(之前,所有字符串扔进栈里面,
压在栈底,等着最后取出来,取出来时候放在最前面就行了
因为栈底1的元素(a,b)就是在cdea之前,到时候我们可以把
cdea翻转了,然后把a,b继续插在它前面
当遇到一个)时候,将sb转换,sb中存的就是(到)中的值
将sb逆转,然后将栈里元素,栈里元素应该是(之前的字符串
将sb逆转之后,将栈里保存的(之前的东西全部放sb最前面,相当于完成了一次翻转
然后指针继续走,如果遇到了(继续将sb中代表的前面排列好的数据,放进栈里去,然后将(后面的放进sb,重复上面操作。
说变了,就是将一个完整()里面的放进SB里然后进行翻转
翻转之后将它前面的东西从栈里拿出来,放在它头头上,然后继续往后遍历
一个(就是压进去一个栈。
class Solution {
public String reverseParentheses(String s) {
//直接使用栈来处理这个题目很幸福
//遇到正常字符串直接加到sb中去
//遇到括号就是一个栈
//用一个sb作为返回值
StringBuffer sb = new StringBuffer();
Stack<String> stack = new Stack<>();
int i = 0;
while(i != s.length()){
char ch = s.charAt(i);
if(ch == '('){
//进栈
//将前面的东西进栈
stack.push(sb.toString(