Java117 最长公共前缀
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
先想思路,看题解,对照题解思路一不一样,很一样直接开始写,没思路直接看题解
public class Solution6 {public String longestCommonPrefix(String[] strs) {if(strs.length == 0)return "";//字符串为空,没公共前缀。String ans = strs[0];//第一个元素为ansfor(int i =1;i<strs.length;i++) {//遍历ansint j=0;for(;j<ans.length() && j < strs[i].length();j++) {//啥意思 ;前面没有内容,表示循环变量i已经在循环外部定义和初始化//这么定义有啥好处:这种写法通常用于当循环变量需要在循环外部初始化,或者需要保留循环结束后的i值的情况。//j<strs第一个字符串的长度 并且 j小于字符串组当前遍历到的字符串的长度if(ans.charAt(j) != strs[i].charAt(j))//如果ans的第j个元素 和 字符串组中第i个元素的 (当前遍历元素)的第j个字符不同//退出循环break;//break是退出当前循环吗?是的 退出for循环 输出相同的当前元素的第j个以及字符串数组中第i个。}ans = ans.substring(0, j);//啥意思?从字符串 ans中截取从索引 0 开始到索引 j(不包括 j)的子字符串,并将结果重新赋值给 ans。if(ans.equals(""))//为啥会=“” 没有想等的 前缀return ans; //是return 原来的ans 还是return 现在的null} return ans;//执行完了,返回ans//计划弄个表看下}
}
class Solution {public String longestCommonPrefix(String[] strs) {if(strs.length == 0) return "";String ans = strs[0];for(int i =1;i<strs.length;i++) {int j=0;for(;j<ans.length() && j < strs[i].length();j++) {if(ans.charAt(j) != strs[i].charAt(j))break;}ans = ans.substring(0, j);if(ans.equals(""))return ans;}return ans;}
}
strs={“flower”,“flow”,“flight”}
str.length!=0
ans=“flower”
str.length()=
| strs | i | j | ans | j<ans.length() && j< strs[i].length() | ans.charAt(j) | strs[i].charAt(j) | ans=ans.substring(0,j) |
|---|---|---|---|---|---|---|---|
| “flower”,“flow”,“flight” | 1 | 0 | flower | 0<6&&0<4 ok | a | flow.charAt[0]=f | f |
| 2 | 1 | flower | 1<6 1<strs[2].length=6 ok | ans.charAt(1)=l | strs[i].charAt(j)=strs[2].charAt[1]=flight.charAt[1]=l | ans= |


ans=ans.substring(0,j)不太理解。
j初始不是0吗?
外部定义



ans=ans.substring(0,j)不太理解。
j初始不是0吗?
外部定义 会变得 根据for

今天晚上再说
