LeetCode系列之【14.最长公共的前缀】C++ 经验总结

    我是代码小白一个,但是本科传统机械专业,研究生是车联网,需要学习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即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值