AI写代码! 神器copilot介绍+安装+使用
!郑重提示!!!!!!!:
正在学编程、算法的同学请千万不要依赖此插件,否则你可能甚至无法手写出一个for循环
AI帮我写代码?我帮AI写代码?庄周梦蝶?蝶梦庄周?十分梦幻。
copilot在VScode和IDEA上都有,我们先在VScode上演示一下,然后告诉大家如何安装使用。
今天早上突然收到邮件通知我获得了使用copilot预览版的权限,是的,使用这个插件需要申请,不过流程很快,待会细说,先来看看效果(这个插件直接下巴都给我震碎了)
Copilot效果演示:
那我们使用这个插件来实现一下求两个字符串的最长公共子串长度试一下:
我仅仅写了一个函数名。。。就已经给我写完了?但是我想换一种写法,看看他能提供什么样的帮助:
-
首先,若两个字符串有一个为null,那么直接返回0:
我刚敲了个if.... -
若两字符串不为null,但有一个长度为0,则返回0:
-
设置一个boolean数组dp,dp[i][j]: str1[i]==str2[j],设置一个maxStart表示最长公共子串的起始下标,maxLen表示最长公共子串的长度:
彩蛋:它好像懂了我的代码想要干什么。。并且尝试帮我生成注释:
-
那好吧,我们依据copilot读懂得我的思路,来写一个for循环:
这次我们试试写注释,让它帮我直接生成代码:
for循环里面的业务应该是写错了,因为dp不需要通过递推实现。
我们自己实现一下,通过另外一个变量k,来寻找最长的斜线:
真厉害。。稍加提示立马就知道我要干什么。。。这确实是我设想的实现代码。。
- 最后返回值
如果是只要求最长长度的话,直接return maxLen即可,而如果是要求最长子串,那么。。
我服了。。它太懂我了
但是应该还是需要更正优化一下,在while循环中,应当加上
&&!dp[i + k][j + k]!
这个条件,否则在遍历时会重复判断重复累加k。
代码放这了,因为这个代码跟我之前自己写得简直一模一样,我就不测试了,大家如果有疑问可以拿去测试一下
点击查看代码
public String longestCommonSubstring(String str1, String str2){
if(str1==null||str2==null) return null;
int n=str1.length();
int m=str2.length();
if(n==0||m==0) return null;
boolean [][] dp=new boolean[n][m];
int maxStart=0, maxLen=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
int k=0;
while(i+k<m&&j+k<n&&str1.charAt(j+k)==str2.charAt(i+k)&&!dp[i + k][j + k]){
dp[j][i]=true;
k++;
}
if(k>maxLen){
maxLen=k;
maxStart=i;
}
}
}
return str2.substring(maxStart, maxStart+maxLen);
}
更新
它居然在帮我生成测试用例:
Copilot的安装使用:以VScode为例
首先在插件商店中安装这个插件,然后它会要求你登录github,按照要求登录即可,之后它会告诉你没有权限使用copilot,因此需要去申请,申请完之后会进入wait list,大概等个两三天之后,就会收到邮件,就可以愉快地手撕代码了
这里是官方getting start文档:
https://github.com/github/copilot-docs/blob/main/docs/visualstudiocode/gettingstarted.md#getting-started-with-github-copilot-in-visual-studio-code