字符串算法题

2023-11-16

1. 替换空格

1.剑指offer:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
这里我提供了两种方法:①常规方法;②利用 API 解决。

public class Solution {

/**
 * 第一种方法:常规方法。利用String.charAt(i)以及String.valueOf(char).equals(" "
 * )遍历字符串并判断元素是否为空格。是则替换为"%20",否则不替换
 */
public static String replaceSpace(StringBuffer str) {

	int length = str.length();
	// System.out.println("length=" + length);
	StringBuffer result = new StringBuffer();
	for (int i = 0; i < length; i++) {
		char b = str.charAt(i);
		if (String.valueOf(b).equals(" ")) {
			result.append("%20");
		} else {
			result.append(b);
		}
	}
	return result.toString();

}

/**
 * 第二种方法:利用API替换掉所用空格,一行代码解决问题
 */
public static String replaceSpace2(StringBuffer str) {

	return str.toString().replaceAll("\\s", "%20");
}

}


本文来自 Snailclimb在CSDN 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_34337272/article/details/82766879?utm_source=copy

3.最长公共前缀

Leetcode: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

在这里插入图片描述

4. 回文串

4.1. 最长回文串

LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如"Aa"不能当做一个回文字符串。注
意:假设字符串的长度不会超过 1010。
示例 1:

输入:
"abccccdd"

输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

我们上面已经知道了什么是回文串?现在我们考虑一下可以构成回文串的两种情况:

①字符出现次数为双数的组合
②字符出现次数为双数的组合+一个只出现一次的字符

统计字符出现的次数即可,双数才能构成回文。因为允许中间一个数单独出现,比如“abcba”,所以如果最后有字母落单,总长度可以加 1。首先将字符串转变为字符数组。然后遍历该数组,判断对应字符是否在hashset中,如果不在就加进去,如果在就让count++,然后移除该字符(解释:因为是求回文长度,所以最后结果是count2或者count2+1)!这样就能找到出现次数为双数的字符个数。

class Solution {
	public  int longestPalindrome(String s) {
		if (s.length() == 0)
			return 0;
		// 用于存放字符
		HashSet<Character> hashset = new HashSet<Character>();
		char[] chars = s.toCharArray();
		int count = 0;
		for (int i = 0; i < chars.length; i++) {
			if (!hashset.contains(chars[i])) {// 如果hashset没有该字符就保存进去
				hashset.add(chars[i]);
			} else {// 如果有,就让count++(说明找到了一个成对的字符),然后把该字符移除
				hashset.remove(chars[i]);
				count++;
			}
		}
		return hashset.isEmpty() ? count * 2 : count * 2 + 1;
	}
}

4.2. 验证回文串
LeetCode: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

在这里插入图片描述

4.3. 最长回文子串
LeetCode: 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

。。。。。。。。。。。。。。。。这题还有疑问???

5. 括号匹配深度
爱奇艺 2018 秋招 Java
一个合法的括号匹配序列有以下定义:
①空串""是一个合法的括号匹配序列
②如果"X"和"Y"都是合法的括号匹配序列,“XY"也是一个合法的括号匹配序列
③如果"X"是一个合法的括号匹配序列,那么”(X)"也是一个合法的括号匹配序列
④每个合法的括号序列都可以由以上规则生成。

例如: “”,"()","()()","((()))“都是合法的括号序列
对于一个合法的括号序列我们又有以下定义它的深度:
①空串”“的深度是0
②如果字符串"X"的深度是x,字符串"Y"的深度是y,那么字符串"XY"的深度为max(x,y)
③如果"X"的深度是x,那么字符串”(X)"的深度是x+1

例如: "()()()“的深度是1,”((()))"的深度是3。牛牛现在给你一个合法的括号序列,需要你计算出其深度。

输入描述:
输入包括一个合法的括号序列s,s长度length(2 ≤ length ≤ 50),序列中只包含'('和')'。

输出描述:
输出一个正整数,即这个序列的深度。

示例:

输入:
(())
输出:
2

代码如下:

在这里插入图片描述

6. 把字符串转换成整数
剑指offer: 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串算法题 的相关文章

  • 元器件选型实例(如何选一款合适的 DC-DC )

    授人以鱼不如授人以渔 实际项目的元器件选型 如何选择合适的元器件 矜辰所致 目录 前言 一 应用背景 二 选型准备 2 1 考虑因素 通用因数 结合实际 2 2 初步确定方案 三 实际选型 3 1 查找目标 3 2 筛选目标 价格和库存 3

随机推荐

  • 设计模式详解(四)——原型模式

    一 场景问题 在电商系统中 订单服务通常是业务核心模块之一 在提交订单的过程中 往往会出现某个订单数额较大的订单 例如一些企业订单订购公司员工节假日礼品 往往会订购成千上万件 如果不做拆分 就会导致订单票据较长 此时就会有拆分订单的操作 假
  • CSS 媒体查询

  • FTPUpload

    std string g strVer Mozilla 5 0 Windows NT 6 1 WOW64 rv 13 0 Gecko 20100101 Firefox 13 0 1 size t CallBackHeader void pS
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • [vue3]vue3中引入class类的写法

    1 在src utils topu下创建一个ts文件 topu ts class Topu Topu类中涉及到的变量 都要提前在这个部分定义好 width Number 结尾必须顿号 不然报错 height Number data any
  • Android之Adapter用法总结

    1 概念 Adapter是连接后端数据和前端显示的适配器接口 是数据和UI View 之间一个重要的纽带 在常见的View ListView GridView 等地方都需要用到Adapter 如下图直观的表达了Data Adapter Vi
  • 【解决方法】Windows7 任务计划程序 “任务计划程序服务不可用。任务计划程序将尝试重新与其建立连接。”

    目录 问题背景 问题描述 折腾过程 解决方法 适用于我的解决方法 2 其他解决方法 供参考 解决方法1 3 解决方法2 4 解决方法3 4 解决方法4 5 出错原因 参考资料 问题背景 今天刚好给家里的旧电脑加上新的内存条 组了个双通道 顺
  • FTP搭建教程

    FTP搭建教程 目录 一 FTP简介 二 搭建FTP 一 FTP简介 FTP中文为文件传输协议 简称为文传协议 它也是一个应用程序 不同的操作系统有不同的FTP应用程序 这些应用程序都遵守同一种协议以传输文件 FTP主要的功能是 上传 和
  • 1011. 在 D 天内送达包裹的能力

    传送带上的包裹必须在 D 天内从一个港口运送到另一个港口 传送带上的第 i 个包裹的重量为 weights i 每一天 我们都会按给出重量的顺序往传送带上装载包裹 我们装载的重量不会超过船的最大运载重量 返回能在 D 天内将传送带上的所有包
  • 用Python 编写Logistics算法

    我们用Python来自己编写Logistics算法 首先 先将一些理论 Logistics算法用于实现线性可分的二分类问题 1 Sigmoid函数 fx 1 1 exp x Sigmoid函数是常用的阈值函数之一 函数图像如下 是不是很像累
  • Kotlin内部类

    一 内部类 定义在类内部的类 与类成员有相似的访问控制 kotlin 默认是静态内部类 非静态用inner关键字 this outter this inner的用法 二 匿名内部类 没有定义名字的内部类 类名编译时生产 类似Outter 1
  • 算法[第四版]-图灵程序设计丛书-笔记

    第一章 笔记 1 1 9 编写一段代码 将一个正整数 N 用二进制表示并转换为一个 String 类型的值 s public class Conversionbinary public static void main String arg
  • 计算机科学巨匠

    贝尔实验室联合多家准备开发Multics 系统 但是最后退出了 但是却培养了优秀的人才 如肯汤姆森 花了四周时间自己做了一个简化的系统 这就是Unix的雏形 因为简化所以同事称为unics 后来觉得用B语言编写性能差 与Ritchie 合作
  • u版YOLOv3的卷积权重分享

    网上有许多关于预训练权重的分享 但大部分都要收费 官网下载又太慢了 自己就破费一把 本着一人收费 大家共享的原则 将自己花钱下载的权重文件分享出来 yolov3 tiny conv 15 darknet53 conv 74 链接 https
  • 动态规划C语言初学

    动态规划问题解决的基本思想 1 根绝问题所求的那一项和变量的个数 确定是一维数组 二维数组或者多维数组 2 写出初始值 一般是某个变量为1或者0 的特殊情况时候的解 3 通过循环 一般是两个循环中间每一层循环表示一个变量的递增情况 4 在循
  • 查看服务器文件命令,服务器上查看文件命令

    服务器上查看文件命令 内容精选 换一换 您可以使用JDK自带的keytool工具自制客户端的密钥库文件 client p12 再使用第三方openssl工具将client p12转换为client pem 最后根据client pem文件得
  • python期货基本面分析_Python量化炒期货入门与实战技巧

    1 1 初识量化炒期货 2 1 1 1 什么是量化炒期货 2 1 1 2 为什么要学习量化炒期货 3 1 2 量化炒期货的特点 4 1 2 1 严格的纪律性 5 1 2 2 完备的系统性 5 1 2 3 妥善运用套利的思想 5 1 2 4
  • 消息摘要算法

    文章目录 概述 MD Message Digest SHA Secure Hash Algorithm MAC Message Authentication Code 其它 概述 看图 我们在下载commons codec时候会有这么一个页
  • 接口接收数据_基于原语的千兆以太网RGMII接口设计

    之前介绍MII接口时 有介绍过RGMII接口的由来 下面在贴一下 表8 7 MII接口介绍 简述 Pins 速率计算 MII 基本的100Mbps 10Mbps接口 RXD 3 0 TXD 3 0 TX ER TX EN RX ER RX
  • 字符串算法题

    1 替换空格 1 剑指offer 请实现一个函数 将一个字符串中的每个空格替换成 20 例如 当字符串为We Are Happy 则经过替换之后的字符串为We 20Are 20Happy 这里我提供了两种方法 常规方法 利用 API 解决