首页 > 编程语言 >[算法刷题打卡]Day11

[算法刷题打卡]Day11

时间:2024-04-10 12:30:12浏览次数:31  
标签:begin end string idx start Day11 ans 打卡 刷题

1、Leetcode-面试经典150题目20- 14. 最长公共前缀

思路:

1、首先对于空的情况判断,直接返回“ ”

2、对于多个即两个以上的字符串找公共前缀,其实就是先两个两个找公共前缀。道理很简单,ans(S1,S2,S3,S4) =  ans(S4,ans(S3,ans(S1,S2)))

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int n = strs.size();
        //首先,对于长度为0的情况
        if(!strs.size()) return " ";
        string ans = strs[0];//结果初始化为第一个字符串
        for(int i = 1;i < n;i ++){
            ans = longestCommonPrefix(ans,strs[i]);
        }
        return  ans;
    }
    string longestCommonPrefix(const string& str1 , const string& str2){
            //比较,首先长度要选两者最短
            int l = min(str1.size(),str2.size());
            int i = 0;//记录下标
            while(l){
                if(str1[i] == str2[i])
                    i ++;
                l--;

            }
        
            return str1.substr(0,i);
    }
};

  2、Leetcode-面试经典150题目21-151. 反转字符串中的单词

思路:

  • #include <alogrithm>
  • reverse(s.begin(),s.end())翻转字符
  • s.earse(s.begin(),s.end())消除除范围内的也可以只有一个参数

1、先将整体的字符串反转

2、逐个找到每个单词,记录开始和结尾,翻转并加上一个' '

3、对于每个单词的reverse范围 ( s.begin()+当前遍历下标-单词的长度 , s.begin()+当前遍历下标)

class Solution {
public:
    string reverseWords(string s) {
        //首先翻转字符串
        reverse(s.begin(),s.end());
        //记录当前下标idx 
        int idx =0;
        //记录start 和 end
        int start ,end;
        int n = s.size();
        for(start = 0;start < n ; ++ start){
           if(s[start] != ' '){
             //对于每个单词之间都需要加一个空格
            if(idx != 0 )//开头不需要加
                s[idx++] = ' ';

            end = start;
            while(end < n &&s[end] != ' '){
                s[idx ++] = s[end ++];
            }
            //遍历完之后,要开始翻转
            reverse(s.begin()+idx-(end - start),s.begin()+idx);

            //end给start,开始遍历下一个单词
            start = end;
           }
        }
        s.erase(s.begin()+ idx ,s.end());
        return s;
    }
};

 还有一种更快的,要用到istringstream在C++中,istringstream是一个用于从字符串中提取数据的类。它是<sstream>标头文件中定义的istringstream类的一个实例。istringstream类允许你将一个字符串视为输入流,从中按照你指定的格式提取数据。

class Solution {
public:
    string reverseWords(string s) {
            istringstream iss(s);
            string ans ;
            string n;//用于存储每次取出来的单词
            while(iss >> n){
                if(ans != ""){
                    ans = n + " " + ans;                
                 }else{
                    ans = n;
                 }
                  
            }

          return ans; 
    }
};

每日一言:“生活就像一本书,不论有多么苦难的一页,都要勇敢地翻过去,因为转过下一页,你会发现风景依然美丽。”

2024年4月10日

softdream

标签:begin,end,string,idx,start,Day11,ans,打卡,刷题
From: https://blog.csdn.net/messizq/article/details/137526559

相关文章

  • 20240409打卡
    第七周第一天第二天第三天第四天第五天第六天第七天所花时间5h5h代码量(行)469493博客量(篇)11知识点了解完成了python大作业,花费两天完成音频处理工具完成学习记录app......
  • 20240408打卡
    第七周第一天第二天第三天第四天第五天第六天第七天所花时间5h代码量(行)469博客量(篇)1知识点了解完成了python大作业,花费两天完成音频处理工具......
  • 算法打卡day37|动态规划篇05| Leetcode1049.最后一块石头的重量II、494.目标和、474.
    算法题Leetcode1049.最后一块石头的重量II题目链接:1049.最后一块石头的重量II 大佬视频讲解:最后一块石头的重量II视频讲解 个人思路和昨天的分割等和子集有些相像,这道题也是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。解法......
  • 使用高德微信小程序插件实现精准获取打卡位置
    由于微信小程序的 getFuzzyLocation 误差太大不得不改用高德微信sdk使用方法:一、下载 sdk相关下载-微信小程序插件|高德地图API二、引入 sdk//引入varamapFile=require('..­/..­/libs/amap-wx.js');Page({onLoad:function(){varthat=this;......
  • 刷题(一) 数组
    数组主要用到的思想:二分法双指针法滑动窗口vector的使用https://blog.csdn.net/u014779536/article/details/111239643https://www.runoob.com/w3cnote/cpp-vector-container-analysis.htmlvector<vector>res(n,vector(n,0));//使用vector定义一个二维数组......
  • 【LeetCode刷题记录】15. 三数之和
    15三数之和给你一个整数数组nums,判断是否存在三元组[nums[......
  • LeetCode刷题记录——day10
    1、https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=2024-spring-sprint-100classSolution{public:voidrotate(vector<vector<int>>&matrix){intn=matrix.size();for(inti=0;......
  • day21java学习打卡:匿名对象的使用
    /* *一.理解“万事万物皆对象” *1.在java语言范畴中,我们的都将功能,结构封装到类中,通过类的实例化, *来调节具体的功能结构 *  >Scanner,String *  >文件:File *  >网络资源:URL *2.涉及到Java语言与前端HTML,后端的数据库交互时,前后端的结构在ja......
  • C++笔记打卡第五天(指针、结构体)
    1.指针inta=10;//指针定义的语法:数据类型*指针变量名int*p;p=&a;//也可以直接定义为:int*p=&acout<<&a<<endl;cout<<p<<endl;//可以通过解引用的方式来找到指针指向的内存(可以修改a的值)*p=1000;cout<<*p<<endl;cout<<a<&......
  • C++笔记打卡第六天(通讯录管理系统)
    1.结构体案例1每名老师带领5个学生,总共有3个老师。设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员。学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值。最终打印出老师数据以及老师所带学生数据。#......