力扣简14 最长公共前缀

昨天写的这道题 花了不到半小时 找bug找了两个半小时 隔壁舍友过来找不到 又让翔哥大半夜给我找 被教育了之后已经十二点二十了 

今天起来又看了一下 记录一下需要改的小问题或者自己的错误

 

自己的源代码如下:

package leetcode;

class Solution {
public String f(String s1,String s2) {
int l=s1.length();
int flag=-1;
if(s2.length()<s1.length()) {
l=s2.length();
}
if(s1.substring(0,l).equals(s2.substring(0,l)))
{
flag=l;
}
else
{
for(int i=0;i<l;i++)
{
if(s1.charAt(i)!=s2.charAt(i))
{
flag=i;
// break;
}
}
}

return (s1.substring(0,flag));
}
public String longestCommonPrefix(String[] strs) {
String com=strs[0];
for(int i=1;i<strs.length;i++)
{
com=f(com, strs[i]);
}
return com;
}

public static void main(String[] args) {
Solution s=new Solution();
System.out.println(s.longestCommonPrefix(new String[] {"flower","flow","flight"}));

}
}

 

1.不会断点调试系统输入的代码 其实只需要加一个main函数 如下

public static void main(String[] args) {
Solution s=new Solution();
System.out.println(s.longestCommonPrefix(new String[] {"flower","flow","flight"}));

}

2.java中常用不换行括号的风格 昨天昨晚罗马数字转换之后自己就开始换行了 被说了 括号问题可以在idea里加rainbow brackets插件解决

3.变量命名要尽可能完整有意义 不要再那么随意了

4.最开始的两两比较函数中的特殊判断 可以设初值为该特殊情况 也就是=l (两个中较短长度)特殊判断越少越好

5.善用java提供的一些函数 比如比较函数 math.Min()

6.最最重要的代码错误 因为在两两比较后 比较到不同值时没有结束比较!导致错误。

 

更改后的代码如下:

class Solution {
public String longestCommonPrefixBetweenTwoStrings(String s1,String s2) {
int l=Math.min(s1.length(),s2.length());
int flag=l;

for(int i=0;i<l;i++)
{
if(s1.charAt(i)!=s2.charAt(i))
{
flag=i;
break;
}
}
return (s1.substring(0,flag));
}
public String longestCommonPrefix(String[] strs) {
String longestCommomPrefix=strs[0];
for(int i=1;i<strs.length;i++)
{
longestCommomPrefix=longestCommonPrefixBetweenTwoStrings(longestCommomPrefix, strs[i]);
}
return longestCommomPrefix;
}
//
// public static void main(String[] args) {
// Solution s=new Solution();
// System.out.println(s.longestCommonPrefix(new String[] {"flower","flow","flight"}));
//
// }
}

posted @ 2021-09-23 10:09  Ssshiny  阅读(24)  评论(1)    收藏  举报