LeetCode刷题之String篇

leetcode 零基础小白如何刷题 Q1:函数的参数为什么不是 vector <string> strs?是一个容器,可能包含大量字符串。如果按值传递(),函数会创建整个容器的副本(包括所有字符串的拷贝),这会消耗额外的(拷贝操作)和(存储副本)。而使用引用传递时,函数直接访问原始容器,不会产生任何拷贝,效率更高。const则保证不会修改ssp。 阅读详情
3. Longest Substring Without Repeating Characters

Code it now! https://leetcode.com/problems/longest-substring-without-repeating-characters/

难度:medium


问题描述:

给定字符串,找出最长没有重复字符的子串。

必须是子串,而不是序列。

解题思路:

  dp算法:时间复杂度O(n),空间复杂度O(n)。

    本题用到了map作为重复元素位置的更新,用到了双指针,一个用来遍历String中的每个元素,另一个用来记录当前字符出现最新位置。dp递推公式为max=Math.max(max,i-j+1);代码如下:

 

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s.length() == 0) return 0;
        HashMap<Character,Integer> map = new HashMap<Character,Integer>();
        int max = 0;
        //i指针用来遍历String,j指针用来记录重复出现元素的最新位置,用来更新位置。
        for(int i=0,j=0;i<s.length();i++)
        {
            if(map.containsKey(s.charAt(i))){
                //如果出现重复字符,j指针就会更新至遍历到i为止,没有出现重复字符的最右位置。 比如abba,j如果不取j和重复出现元素的最大值的话,当i=3时,j=0+1=1,最后计算出的最大子串长度就为3,因此还是要从j=2的位置算起。
                j = Math.max(j,map.get(s.charAt(i))+1);
                //j = map.get(s.charAt(i))+1;   错误!
            }
            map.put(s.charAt(i),i);
            //动态规划方程。
            max = Math.max(max,i-j+1);
        }
        return max;
    }
}




17. Letter Combinations of a Phone Number

Code it now! https://leetcode.com/problems/letter-combinations-of-a-phone-number/

难度:medium


问题描述:

给定数字字符串,返回数字可能表示的所有可能的字母组合。

数字到字母映射如下。


解题思路:

  回溯算法:时间复杂度O(2^n),空间复杂度O(1)。

 本题使用了回溯思想分三步求解:

  1.针对问题,确定解空间(明确定义问题解空间)。

  2.确定结点的子解终止条件。

  3.一般以深度优先搜索解空间。

 

class Solution {
    static String[] letterMap = {
        " ",       //0
        "",        //1
        "abc",     //2
        "def",     //3
        "ghi",     //4
        "jkl",     //5
        "mno",     //6
        "pqrs",    //7
        "tuv",     //8
        "wxyz"     //9
    };
    
    public static List<String> res = null;
    
    public List<String> letterCombinations(String digits) {
        //树形问题 
        res = new ArrayList<String>();
        if(digits.equals("")){
            return res;
        }
        //针对问题,确定解空间。
        findCombination(digits,0,"");
        return res;
    }
    //s中保存了从[0...index-1]翻译得到的一个字母字符串
    //寻找和digits[index]匹配的字母,获得digits[0...index]翻译得到的解
    public static void findCombination(String digits,int index,String s){
        //2.确定结点的子解终止条件。
        if(index==digits.length()){
            res.add(s);
            //此处则是已遍历完digits,因此不再进入下面的操作,而且需要return终止递归调用。
            return ;
        }
        
        char c = digits.charAt(index);
        String letters = letterMap[c-'0'];
        //递归操作不断新添新元素至s当中。 这是组合问题,不需要回退一步。是找出所有组合  深度优先遍历
        for(int i=0;i<letters.length();i++)
            findCombination(digits,index+1,s+letters.charAt(i));
    }
}





20. Valid Paraenttheses

Code it now! https://leetcode.com/problems/valid-parentheses/

难度:easy


问题描述:

括号匹配。

解题思路:

  dp算法:时间复杂度O(n),空间复杂度O(n)。

 本题使用栈Stack来实现的括号匹配,思路是当遇到左括号({[时,进行压栈操作,当遇到右括号)}]时,进行出栈匹配操作,如果不能匹配返回false,全部都能匹配最后返回true,代码如下:

 

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<Character>();
        for(int i=0;i<s.length();i++){
            //遍历整个string,如果遇到左括号({[时,进行入栈操作。
            if(s.charAt(i)=='('||s.charAt(i)=='{'||s.charAt(i)=='[')
                stack.push(s.charAt(i));
            else{
                //如果遇到右括号)}]时,进行出栈匹配操作,首先判断栈是否为空,不为空进行match操作,最后判断是否成功配对。
                if(stack.size()==0)
                    return false;
                
                char c = stack.peek();
                stack.pop();
                    
                char match;
                if(s.charAt(i)==')'){
                    match = '(';
                }else if(s.charAt(i)=='}'){
                    match = '{';
                }else{
                    assert(s.charAt(i)==']');
                    match = '[';
                }
                if(c!=match){
                    return false;
                }
            }
        }
        if(stack.size()==0) return true;
        else return false;
    }
}






58. Length of Last Word

Code it now! https://leetcode.com/problems/length-of-last-word/

难度:easy


问题描述:

给定一个字符串由大写小写空格字符组成,返回字符串中最后一个单词长度,如果最后一个字符不存在则返回0。

解题思路:

  String库函数算法:时间复杂度O(1),空间复杂度O(1)。

 本题首先需要分析这个字符串,第一步是去除字符串前后的空格,第二步是找到最后一个空格的索引,第三步使用字符串总长度减去这个索引,即为最后一个单词的长度。代码如下:

class Solution {
    public int lengthOfLastWord(String s) {
        s = s.trim();
        int lastIndex = s.lastIndexOf(' ') +1;
        return s.length() - lastIndex;
    }
}







67. Add Binary

Code it now! https://leetcode.com/problems/add-binary/

难度:easy


问题描述:

给定两个二进制字符串,返回它们的和(也是二进制字符串)。

解题思路:

  进位算法:时间复杂度O(n),空间复杂度O(1)或者O(n)。

 本题可能大家一开始的想法是把两个二进制转换成十进制相加,然后再转为二进制输出结果。但是这里用到的是一种适合任何两个数相加的一种策略,在这简单的叫做进位法,从最右位数开始相加,该进位则进位的思想(这里需要注意的是进位的处理。使用到了count来统计进位)。代码如下:

class Solution {
    public String addBinary(String a, String b) {
        //第一步:把字符串转换成字符数组。
        char[] c1 = a.toCharArray();
        char[] c2 = b.toCharArray();
        int len_a = a.length()-1;
        int len_b = b.length()-1;
        int index = 0;
        StringBuffer sb = new StringBuffer();
        while(len_a>=0||len_b>=0||index==1){
            //判断是否走到了字符数组尽头,如果是则赋值0,不是则取出值。
            int num1 = len_a>=0? c1[len_a]-'0':0;
            int num2 = len_b>=0? c2[len_b]-'0':0;
            int count = num1+num2;
            //此处分三种情况讨论,见判断条件。
            if(count+index==3){
                index = 1;
                sb.append(1);
            }else if(count+index==2){
                index = 1;
                sb.append(0);
            }else{
                sb.append(count+index);
                index = 0;
            }
            len_a--;
            len_b--;
        }
        return sb.reverse().toString(); 
    }
}






344. Reverse String

Code it now! https://leetcode.com/problems/reverse-string/

难度:easy


问题描述:

反转给定字符串。

解题思路:

  StringBuilder库函数算法:时间复杂度O(1),空间复杂度O(1)。

 String中没有对字符串反转的库方法,但是StringBuilder提供了丰富的库方法,此处主要利用到库函数去处理问题。

  简单代码如下:

class Solution {
    public String reverseString(String s) {
        StringBuffer sb = new StringBuffer();
        sb.append(s);
        return sb.reverse().toString();       
    }
}

 如果不使用库方法,我们又是如何实现的字符串反转呢? 下面的方法实现在leetcode中显示超时。。。

class Solution {
    public String reverseString(String s) {
        String str = "";
        for(int i=s.length()-1;i>=0;i--)
        {
            str += s.charAt(i);
        }
        return str;
    }
}
 于是对比,可以发现stringbuilder反转实现比这个好。str+这个操作很消耗时间。进一步又想到了采用双指针的方式去反转这个字符串。代码如下:

 

class Solution {
    public String reverseString(String s) {
        char[] c = s.toCharArray();
        int i = 0;
        int j = s.length()-1;
        while(i<j)
        {
            char temp = c[i];
            c[i] = c[j];
            c[j] = temp;
            i++;
            j--;
        }
        return new String(c);
    }
}



















告别重打包:在Android 9上实现免Root的Frida-Gadget持久化Hook(附AOSP源码修改详解) 本文详细介绍了在Android 9上实现免Root的Frida-Gadget持久化Hook技术方案。通过修改AOSP源码,绕过传统重打包方式面临的签名校验和完整性检查,实现在非Root环境下的系统级Hook。文章包含核心代码修改、编译配置调整及调试技巧,为移动安全研究提供高效稳定的解决方案。 阅读详情

相关推荐

从零开始搭建多旋翼无人机:飞控系统配置全攻略(含IMU校准技巧)

本文详细介绍了从零开始搭建多旋翼无人机的飞控系统配置全流程,重点解析了IMU校准技巧。涵盖飞控硬件选型、IMU校准(加速度计、陀螺仪、磁力计)、GPS与罗盘集成方案、飞行模式配置策略及实战故障排查手册,帮助DIY爱好者提升无人机飞行稳定性与安全性。

beta5的博客 798

数据类型:String

redis的数据类型

strive_mianyang的博客 532

基于STM32和K210的自动驾驶小车设计

自动驾驶技术正在迅速发展,成为了汽车行业和智能交通领域的热点之一。随着科技的发展,STM32和K210这两款芯片为自动驾驶小车提供了优秀的硬件支持。本文我们将学习如何使用STM32和K210打造一个简单的自动驾驶小车。提示:以下是本篇文章正文内容,下面案例可供参考通过这篇文章,掌握了如何使用STM32和K210构建一个简单的自动驾驶小车。通过了解基本的电路设计,并编写了STM32和K210的代码。通过这个例子,可以更好地理解如何在嵌入式系统中使用STM32和K210,以及如何实现自动驾驶小车的简单功能。

Kyle_Chan_zMH的博客 2219

C++---STL标准库之string函数超长解析,十大常用函数全覆盖,轻松掌握,灵活运用,全面解决string字符串难题!

STL---stringstring()定义string 中内容的访问string常用函数 string()定义 在 C 语言中,一般使用字符数组 char str[]来存放字符串,但是使用字符数组有时会显得操作麻烦,而且容易因经验不足而产生一些错误。为了使编程者可以更方便地对字符串进行操作,C++在 STL 中加入了string 类型,对字符串常用的需求功能进行了封装,使得操作起来更方便,且不易出错。 如果要使用 string,需要添加string头文件,即#include < string &gt

livercy 1082

解决Thingsboard数据下发难题:自定义RPC请求格式的3种方法(含源码修改指南)

本文详细介绍了解决Thingsboard数据下发难题的3种自定义RPC请求格式方法,包括规则链脚本转换、TB-Gateway中间层转换和源码级定制方案。通过实际案例和性能对比,帮助开发者根据项目需求选择最适合的解决方案,提升物联网平台与设备的兼容性。

weixin_29008691的博客 232

上网第二课:办了百兆宽带,为什么测速只有一半?

最慢的那一环。

qq_36765170的博客 110

C++ string类

c++提供了以下两种类型的字符串表示形式:(1)c风格字符串,使用字符数组char str[]来存放字符串;(2)c++ STL中的string类类型。 如果要使用string,需要添加string头文件,即#include <string> (注意string.h和string是不一样的头文件)。 除此之外, 还需要在头文件下面加上一句: "usingn amespace std; " 1. string的定义 定义string的方式跟基本数据类型相同, 只需要在string后跟上变量名即

qq_43484853的博客 1063

流体仿真软件:COMSOL Multiphysics二次开发_(11).COMSOL与外部软件的数据交换

通过上述方法,您可以实现 COMSOL Multiphysics 与外部软件的数据交换,从而更好地集成和分析仿真结果。无论是从文本文件导入数据,导出数据到 MATLAB,还是通过 API 和 COMSOL Server 实现实时通信,都能满足不同场景下的需求。希望这些内容对您在流体仿真领域的开发工作有所帮助。

kkchenjj的博客 1553

论String操作时间复杂度

面试题 以下类中,method1和method2的时间复杂度一样吗?为什么。 [code="java"] public class Test { public static final int MB = 1024 * 1024; public static final long TIMES = 500000000L; public static void main(Strin...

humingchun的博客 4380

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

【深度解析】解决 NVIDIA 显卡“掉卡”与 Xid 79 错误:开启持久化模式 (Persistence Mode)

Edward的博客 864

基于卷积神经网络的球罐结构损伤识别

球罐结构损伤识别方法研究 摘要:本研究针对球形储罐(球罐)结构健康监测需求,提出基于卷积神经网络(CNN)的损伤识别方法。通过ANSYS有限元仿真构建包含5种裂纹深度的500组振动信号数据集,设计包含卷积层、池化层和全连接层的CNN网络架构。实验结果表明,该方法在训练集和测试集上分别达到98.4%和96.0%的准确率,验证了其在球罐焊缝损伤识别中的有效性。研究提供了完整的MATLAB实现代码,为球罐结构智能化监测提供了技术参考。 关键词:球罐结构;卷积神经网络;损伤识别;振动信号;深度学习

AI的内部世界的博客 120

3) redis(string)命令详解,时间复杂度及演示

(string)字符串命令,一个键最大能存512m

哥斯拉啊啊啊哦的博客 636

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

跳槽记录【Leetcode算法题篇】273. Integer to English Words

今天开始对自己的跳槽过程做个记录吧。主要是因为在上课的过程中有人提到最好自己写技术博客,这样方便自己回顾和复习,同时可以尝试把思路讲清楚。 已经刷了一段时间的题了,主要针对的是Facebook的面试题。现在想想,当时接了Facebook的offer是不是就不用再刷了。。。诶但也没办法假设。。。人生经历就是各种各样的机缘巧合。。。 针对安卓方面的学习/复习,会单开一篇。这篇主要把自己做题学习和实践的做法思路写出来。 273.Integer to English Words:https://leetco.

亨利的专栏 311

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【一日双题—见微知著】一道简单+中等题——Bigram 分词+139. 单词拆分(叫组合更恰当吧)

目录一、简单题 1078. Bigram 分词1.1题目描述1.2解题思路1.3Java题解二、中等题 139. 单词拆分(叫组合更恰当吧)2.1 题目描述2.2 解题思路(动态规划DP图解)2.3代码实现结尾 一、简单题 1078. Bigram 分词 1.1题目描述 给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 “first second third” 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。 对于每

代码之狐的博客 584

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

idea实用的插件

最近在抖音上看见的idea插件,记录下来,供以后换电脑后安装使用 google-java-format:代码自动格式化工具 translation:翻译工具 key promoter X:提示插件 Alibaba Java Coding Guidlines:阿里巴巴代码检测 Leetcode Editor:力扣在线刷题插件 RestfulToolkit:搜索URL插件 Jclasslib Bytecode Viewer:看类的字节码文件 Camelcase:字符串格式之间切换插件 解释: 驼峰第一个单

代码无常,怀疑人生 645

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Leetcode】string类刷题

🔥个人主页Quitecoder🔥Leetcode刷题。

Quietcoder的博客 3332

【Java】力扣 - 刷题笔记 - 1108

【Java】力扣 - 刷题笔记 - 1108【Java】力扣 - 刷题笔记 - 1108题目介绍解题思路 【Java】力扣 - 刷题笔记 - 1108 每日一道题,提升一点点 题目介绍 1108. IP 地址无效化 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。 示例 1: 输入:address = "1.1.1.1" 输出:"1[.]1[.]1[.]1" 示例 2: 输入:address = "

李晋江的博客 511

Leetcode 刷题经验总结 C++版

文章目录一 容器1.vector2.stack3.queue, deque4. set,multiset5. map,multimap,hashmap二 常用类1. string三 常用函数1. sort()2. next_permutation()3. strtok()4. atoi(), atol(), atof()5. sprintf()6. strtol() 一 容器 每个容器都提供了很多方法,这里只介绍最适用于这种数据结构的一些方法,并且在做题时候会常用的一些方法。 1.vector vector

yao09605的博客 2183

【LeetCode刷题】LeetCode 题解汇总

机器感知 一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号 前言 现如今,对于技术人员(软开、算法等)求职过程中笔试都是必不可少的(免笔试的除外,大部分人都需要笔试),而笔试一般组成都是选择、填空、简答题、编程题(这部分很重要),所以刷题是必不可少的;对于应届生求职来说更是需要疯狂的刷题,因为平时都有自己的科研任务,但是个人还是建议刷题应该循序渐进的,提前准备,...

公众号『机器感知』 1028

【力扣】刷题总结

四:总的策略合起来最大(遍历判断要定位的为第i点)

weixin_43843390的博客 831

Leetcode刷题顺序

这个重点题目是我个人把Leetcode前400题进行精简,精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于简单题目(例:100题:Same Tree) 删除题意不同,代码基本相同题目(例:136 & 389,保留一个) 所有题目我尽量保证客观公正,只是按大概率删除不常考题目,很多题目面经出现过,但出现次数属于个位数或者只有一两家出现。 只是参看:如在面试中出现题目概不负责

艺博❀ 891

【leetcode】高频题目整理_字符串篇( High Frequency Problems, String )

截止至今LeetCode题目总量已经有1582题,估计将来每年平均增长300题左右,大部分人肯定是刷不完的,所以得有选择地刷LeetCode。 一种公认的刷题策略是按类别刷题,可是每个类别也有许多题,在有限的时间里到底该刷哪些题呢?个人根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,对于官方统计频率太低的题目,不予收录,最终得到了这个高频题目表格。 例如,对于下图中题号#275与#270的题目将被收录,并且#275出现频率大于#270;而对于题号#1011与#11

嵌入式与Linux那些事的博客 1802

【C++】C++ string类:Leetcode刷题巩固

本文介绍了C++字符串处理的常见操作,包括查找唯一字符、字符串转换、大数运算、反转处理和回文验证。通过代码示例展示了如何实现查找首个唯一字符位置、字符串转整数、字符串加法和乘法运算、整体反转和按规则反转字符串、验证回文串等功能。这些操作涵盖了字符串处理的核心技术点,适用于各种编程场景,强调在实现时需要注意边界条件和特殊情况处理,如溢出判断、空格处理等,以保证代码的健壮性。

2501_92613722的博客 985

刷题用到的非常有用的函数c++(持续更新)

可以将 >> 运算符看作是一个提取器,它会从 stringstream 中读取下一个可用的值,并将其存储到变量中。在此代码片段中,每次循环会从 stringstream 中读取一个单词(以空格为分隔符),并将其存储在变量 word 中。需要注意的是,如果字符串中包含除数字以外的字符,或者超出了整数类型的取值范围,那么转换将失败。它将整数转换为相应的十进制字符串。函数时,要确保输入的字符串符合期望的格式和范围,或者进行适当的异常处理。需要注意的是,转换后的字符串对象是一个新的副本,原始的整数值并不受影响。

Yawesh的博客 1649

leetcode 刷题记录

记录一下 LEETCODE刷题方法: 刷标签的前300道题 按照标签刷每一类的题目 刷题顺序:简单->中等->困难

qq_39364945的博客 247
上一篇: Leetcode刷题之Array篇
下一篇: 牛客网面经题题目及答案总结-计算机网络篇
Trap_In_Study
博客等级 码龄9年 10粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值