【专项刷题】— 字符串

news2024/12/22 23:10:43

1、最长公共前缀 - 力扣(LeetCode)

思路:

  1. 解法一:两两比较字符串
  2. 解法二:比较每一个字符串的同一位
  3. 图解:
  4. 代码:
    class Solution {
        public String longestCommonPrefix(String[] strs) {
            String ret = strs[0];
            for(int i = 1; i < strs.length; i++){
                //调用方法,两两比较
                ret = commonStr(strs[i],ret);
            }
            return ret;
        }
        public String commonStr(String str1, String str2){
            int i = 0;
            //进行比较
            while(i < Math.min(str1.length(),str2.length()) && str1.charAt(i) == str2.charAt(i)){
                i++;
            }
            return str1.substring(0,i);
        }
    }
    
    public String longestCommonPrefix(String[] strs) {
            int n = strs.length;
            for(int i = 0; i < strs[0].length(); i++){
                //以第一组的字符串为基准
                char tmp = strs[0].charAt(i);
                //判断每一组的字符串
                for(int j = 1; j < n; j++){
                    //如果后面的字符串长度刚好等于基准的 i ,或者不相等就返回
                    if(i == strs[j].length() || strs[j].charAt(i) != tmp){
                        //返回截取的基准
                        return strs[0].substring(0,i);
                    }
                }
            }
            //说明基准就是最长公共前缀
            return strs[0];
        }

2、​​​​​​最长回文子串 - 力扣(LeetCode) 

思路:

  1. 从中心开始向右向左遍历,其中需要考虑子串长度为奇数和偶数的情况
  2. 代码:
    public String longestPalindrome(String s) {
            int n = s.length();
            int begin = 0; 
            int len = 0;
            //固定所有的点
            for(int i = 0; i < n; i++){
                //奇数情况
                int left = i;
                int right = i;
                while(left >= 0 && right < n && s.charAt(left) == s.charAt(right)){
                    left--;
                    right++;
                }
                if(right - left - 1 > len){
                    len = right - left - 1;
                    begin = left + 1;
                }
                //偶数情况,i+1
                left = i;
                right = i+1;
                while(left >= 0 && right < n && s.charAt(left) == s.charAt(right)){
                    left--;
                    right++;
                }
                if(right - left - 1 > len){
                    len = right - left - 1;
                    //此时left和right的位置都是不合法的位置,需要各自回退
                    begin = left + 1;
                }
            }
            return s.substring(begin,begin + len);
        }

 3、二进制求和 - 力扣(LeetCode)

思路:

  1. 对两个字符串从后往前相加操作,模2,然后再除2更新t,最后将字符串反转就是结果了
  2. 代码:
    public String addBinary(String a, String b) {
            int len1 = a.length() - 1;
            int len2 = b.length() - 1;
            int t = 0;
            StringBuffer ret = new StringBuffer();
            while(len1 >= 0 || len2 >= 0 || t != 0){
                if(len1 >= 0){
                    //加完就向前一个
                    t += a.charAt(len1--) - '0';
                }
                if(len2 >= 0){
                    t += b.charAt(len2--) - '0';
                }
                //拼接最终结果
                ret.append((char)('0' + (char)(t % 2)));
                //更新t的值
                t /= 2;
            }
            return ret.reverse().toString();
        }

 4、字符串相乘 - 力扣(LeetCode)

思路:

  1. 首先将两个字符翻转,便于模拟乘法操作
  2. 然后再无进位相乘然后再相加,最后处理进位
  3. 其中相加的位置就是 i + j 位置,数组的长度就是 两个字符串的长度减去1(99 * 99,长度就是2+2-1 = 3)
  4. 代码:
    public String multiply(String num1, String num2) {
            int m = num1.length();
            int n = num2.length();
            int[] tmp = new int[m + n - 1];
            //1、翻转字符串
            char[] n1 = new StringBuffer(num1).reverse().toString().toCharArray(); 
            char[] n2 = new StringBuffer(num2).reverse().toString().toCharArray(); 
            //2、进行无进位相乘、相加操作
            for(int i = 0; i < m; i++){
                for(int j = 0; j < n; j++){
                    //每一位循环都相加
                    tmp[i + j] += (n1[i] - '0') * (n2[j] - '0');
                }
            }
            //3、处理进位
            int cur = 0;
            int t = 0;
            StringBuffer ret = new StringBuffer();
            while(cur < m + n - 1 || t != 0){
                if(cur < m + n - 1){
                    t += tmp[cur++];
                }
                ret.append((char)((char)(t % 10) + '0'));
                t /= 10;
            }
            //4、处理前导0
            while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0'){
                ret.deleteCharAt(ret.length()-1);
            }
            return ret.reverse().toString();
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2106508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北京精诚博爱医院简介

北京精诚博爱医院位于北京市朝阳区崔各庄乡南皋路188号&#xff0c;地处东北五环外&#xff0c;毗邻首都机场高速&#xff0c;与北京798艺术区和草场地艺术区隔窗相望&#xff0c;交通便捷。是一所以医疗、康复、预防保健为一体综合性医保定点医院。 医院为国家呼吸临床中心医联…

旺店通ERP集成用友NC(用友NC主供应链)

源系统成集云目标系统 用友NC介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平…

基于Java的在线文献检索系统

基于springbootvue实现的在线文献检索系统&#xff08;源码L文ppt远程调试&#xff09;4-027 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入在线文献检索系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者…

C# NX二次开发-获取体全部面

使用 UF_MODL_ask_body_faces 或获取一个体的全部面&#xff1a; 代码&#xff1a; theUf.Modl.AskBodyFaces(body.Tag, out var face_list);face_list.Foreach(x > x.NxListing()); 免责声明&#xff1a; 只用于参考&#xff0c;如果有什么问题不要找我呀。

【Google Play】携程旅行8.71.6最新国际版(如何鉴别是否官方?)

作为业内权威的在线旅游服务公司&#xff0c;携程旅行手机客户端提供中国境内超过11万家酒店和公寓的选择&#xff0c;海外则有超过70万家酒店可供预订。覆盖所有国内航线机票以及大部分主流国际航线&#xff0c;国内火车票全覆盖&#xff0c;长途汽车票则涵盖了500多个城市的2…

Tauri应用开发实践指南(6)— Tauri 主题多语言设置开发

前言 在现代应用开发中,用户界面的主题和多语言支持是提升用户体验的关键因素。本文将介绍如何在Tauri应用中实现窗口主题设置和多语言设置的开发,并提供更多实用的技巧和最佳实践。 我们在上一节中实现了集成本地数据库的操作&#xff0c;现在通过这个能力再实现主题&多…

分布式微服务项目mysql不同数据库之间跨库联查,使用快捷表实现跨库分页查询

场景: 在分布式微服务项目中,经常有需要关联查询其他表信息的业务,但分布式项目中分库是肯定的,不同服务的数据库服务可能部署在不同的机器上,以下是几种跨库联查分页的几种解决方式 一、快捷表联查【推荐】 1、联合与被联合的数据库服务 FEDERATED 引擎都要开启…

Cpp学习手册-基础学习

首先你要去网上下载对应的运行软件&#xff0c;先把对应的 C 环境配置好&#xff0c;配置好了我们就可以开始我们的C 学习之旅了。希望通过学习我们能够成为一个比较不错的 C 开发工程师。我也会持续更新 C 知识。 1. C语法基础 当我通过 CLion 工具创建了一个新的 Project 。…

linux(ubuntu)安装QT-ros插件

Linux下的qt安装ros插件 查看qt版本和对应的ros插件版本查看qt版本查看 qt creator 版本 qt creator进行更新升级下载版本对应的ros_qtc_plugin 插件插件安装安装成功 查看qt版本和对应的ros插件版本 想要qt与ros联合开发&#xff0c;我门需要在qt creator中添加ros的插件&…

髓鞘少突胶质细胞糖蛋白;MOG 35-55 ;CAS:149635-73-4

【MOG35-55 简介】 髓鞘少突胶质细胞糖蛋白&#xff08;Myelin Oligodendrocyte Glycoprotein&#xff0c;MOG&#xff09;是一种在中枢神经系统中表达的糖蛋白&#xff0c;主要由少突胶质细胞产生&#xff0c;并在髓鞘形成中发挥作用。 【中文名称】髓鞘少突胶质细胞糖蛋白 …

day43(9/4)——k8s

一、前期准备 1、配置主机映射 [rootk8s-master ~]# vim /etc/hosts 192.168.8.168 k8s-master 192.168.8.176 k8s-node1 192.168.8.177 k8s-node2 [rootk8s-master ~]# ping k8s-master 2、配置yum源 [rootk8s-master yum.repos.d]# vim kubernetes.repo [kubernetes…

山东大学机试试题合集

&#x1f370;&#x1f370;&#x1f370;高分篇已经涵盖了绝大多数的机试考点&#xff0c;由于临近预推免&#xff0c;各校的机试蜂拥而至&#xff0c;我们接下来先更一些各高校机试题合集&#xff0c;算是对前边学习成果的深入学习&#xff0c;也是对我们代码能力的锻炼。加油…

SQL通用语法、SQL分类以及DDL

1.SQL 1.1SQL通用语法 1.SQL语句可以单行或多行书写&#xff0c;以分号结尾2.SQL语句可以使用空格/缩进来增强语句的可读性。3.MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写。4.注释&#xff1a; 单行注释&#xff1a;–空格 注释内容或#注释内容&#…

浏览器控制台安装并使用npm

​ 有时候想调用npm里的库跟api&#xff0c;正常我们项目环境里可以直接调用&#xff0c;其实也可以直接在开发者工具的控制台里安装&#xff0c;然后调用安装好的库的api Github安装方式&#xff1a;console-importer 安装完成后我们就可以安装第三方的库&#xff0c;然后直…

【Hot100算法刷题集】哈希-01-两数之和(暴力枚举再优化,也不是哈希表的对手)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…

数据结构-栈、队列-相关练习

数据结构-栈、队列-相关练习 1.用队列实现栈2.用栈实现队列3.设计循环队列 1.用队列实现栈 用队列实现栈 题目概述&#xff1a;请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 em…

《信息技术 云计算 边缘云通用技术要求》国家标准发布,九州未来参编

日前&#xff0c;2024年第17号国家标准公告发布&#xff0c;由全国信标委云计算标准工作组组织制定、九州未来作为行业专家单位参编的《信息技术 云计算 边缘云通用技术要求》国家标准正式获批发布。 边缘云作为云计算技术的有效补充和拓展&#xff0c;能够实现将云计算能力拓展…

信捷 XD PLC 数据寄存器的偏移量

信捷 XD PLC&#xff0c;数据寄存器 D 可用作软元件的偏移量&#xff0c;使得软元件的使用更加简单和便于控制。 格式&#xff1a;Dn[Dm]、Xn[Dm]、Yn[Dm]、Mn[Dm]等。 带偏移的位组成的字寄存器&#xff1a;DXn[Dm]表示 DX[nDm]。 带偏移的软元件&#xff0c;偏移量只可用软…

信息安全发展阶段与形式

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 0x01&#xff1a;信息安全的发展阶段 信息安全的发展阶段可以参照下面的思维导图&#xff1a; 0x02&#xff1a;我国的信息安全形式 2013 年&#xff0c;“棱镜门” 事件在全球持续发酵&#xf…

创业型公司如何实现数字化营销突破?

​在当今数字化时代&#xff0c;创业型公司可谓机遇与挑战并存。如何利用数字化营销手段实现突破&#xff0c;成为发展关键。 一、现状之困 资源有限&#xff1a;创业型公司资金、人力相对匮乏&#xff0c;难在传统营销上大笔投入。 品牌知名度低&#xff1a;新公司在市场上认…