我是代码小白一个,但是本科传统机械专业,研究生是车联网,需要学习C++,但是也需要转行,所以学习完基础开始刷题力扣,很多不懂的地方也是站在前辈的肩上学习,先自己思考编写在VS上,然后实现不了再看别人的文章,可能别人没法注解全部的语句,那我为大家解惑就一个个进行注解方便阅读,可能有些人读不懂我写的,欢迎留言。
①第一反应是其规定输入的是放在了vector容器中,而不是string容器无法用其指令substr以及比较的?
②第二反应是其将字符串都输入同一个容器对象,而不是不同容器对象,即索引也是同一个对象不同位置?
③第三反应是是否采用集合算法的形式去计算,但是集合算法是用于两个不同容器,且其中存放为有序列?
③第四反应是肯定要进行遍历查询操作的,但在VS中用push_back指令插入字符串,然后用strs[1],无法输出?
注意!!用push_back插入的位置0、1、2分别为三个字符串,输出strs[0]为flower。
⑤第五反应是看过相应的解题提示后,明白想的有点复杂,可以直接用类似strs[0][1]这种表达方式来了解字
符串组,单个组内的字符情况。
⑥第六反应在编写代码的时候,发现要注意判断输入字符串单组的大小,应该要按照最小组的大小进行遍
历,其实无论大小都可以,因为是for循环对应输入i的位置进行比较,如果大小小,那么其位置
为空,则也无法比较。
⑦第七反应看别人的代码形式,弄懂了每一步,像这种应该是先循环字符数,再嵌套内循环组数,就一个字
符,先循环比较所有的组数。
#include
using namespace std;
#include
#include
int main()
{
vector strs;
strs.push_back("flower");
strs.push_back("flow");
strs.push_back("flight");
if (strs.size() == 0) //判断输入的字符串组为空 则输出为0
{
return 0;
}
else if (strs.size() == 1) //判断输入的字符串组为1 则输出为1个
{
cout << strs[0] << endl;
}
else //判断输入的字符串组为2个及以上
{
int flag = 0; //字符串组对比的累加标志
int end = 0; //最后输出字符串组的截取标志
for (int j = 0; j < strs[0].size(); j++) //第一个循环是循环的输入单个字符串组中的字符数
{
for (int i = 1; i < strs.size(); i++) //嵌套第二个循环是循环的输入字符串组的组数 按照第一个循环遍历的字符 每个组一起先比较
{
if (strs[0][j] == strs[i][j]) //我们这边固定就拿第一个字符组与后面的做对比,不需要了解最短字符串组,因为为空也可以break
{
flag = 1;
}
else
{
flag = 0;
break;
}
}
if (flag) //当第一个for循环 即意味着第一个字符每个组都公共时 此时累加标志flag为1 那么截取标志就累加一个
{
end+=flag;
}
else
{
break;
}
}
cout << "最长的公共前缀为:" << strs[0].substr(0,end)<< endl;
}
system("pause");
}
以上为自己在VS中所编写的,如果在力扣中上交需要将一些cout修改为return即可。