字符串的算法题目

news2024/9/22 13:26:26

题目一:

描述
对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1\le n \le 10^61≤n≤10
6
, 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)

思路:

在这里插入图片描述

需要用到的知识点:

Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回子字符串数组
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。

注意事项
在java.lang包中有String.split()方法,返回是一个数组。

使用时要注意参数如果是特殊符号的话要进行转义。

1、“.”和“|”都是转义字符,必须得加"“;
  如果用“.”作为分隔的话,必须是如下写法:
String.split(”.“),这样才能正确的分隔开,不能用String.split(”.“);
如果用“|”作为分隔的话,必须是如下写法:
String.split(”|“),这样才能正确的分隔开,不能用String.split(”|");

2、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用
  String.split(“and|or”);

3、public String[] split(String regex,int limit)根据匹配给定的正则表达式来拆分此字符串。
  此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中
  的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。

方法一:

package com.company.day01;
/*
题目要求:
* 输入字符串:
"This is a sample",16

返回值:
"SAMPLE A IS tHIS"*/
public class Solution1 {
    public static void main(String[] args) {
        Solution1 solution1 = new Solution1();
        String res = solution1.trans("This is a sample", 16);
        System.out.println(res);
    }

    /**
     *
     * @param s
     * @param n
     * @return
     */
    public String trans(String s, int n) {
        //第一步:先做容易的大小写转换,所有下小写颠倒
        if(n == 0)
            return s;

        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < n; i++) {
            //如果是大写
            if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){
                //stringBuilder用于将转换后的字母串起来
                stringBuilder.append( (char)(s.charAt(i) + 32) );
            }else if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){
                stringBuilder.append( (char)(s.charAt(i)-32) );
            }else {
                stringBuilder.append(s.charAt(i));//串空格
            }
        }
        //stringBuilder存的是大小写转换后的字符串
        //第二步:整个字符串反转
        StringBuilder reverse = stringBuilder.reverse(); //ELPMAS ---
        //第三步:每一个单词内部进行反转
        for (int i = 0; i < n; i++) {
            int j = i; //j指针 从 i位置开始遍历
            while(j <n && reverse.charAt(j) != ' '){//j 指针右移,出了循环就证明标记处一个单词的结尾位置+1
                j++;
            }
            String tempWord = reverse.substring(i, j);//截取每一个单词
            StringBuffer bufferWord = new StringBuffer(tempWord);//每一个单词的StringBuffer
            reverse.replace(i, j, bufferWord.reverse().toString());//将反转后的单词替换掉原先的单词
            i = j; //i指针 跳跃到 j 位置并重合
        }
        return reverse.toString();
    }
}


方法二:

package com.company.day01;

import java.util.ArrayList;
import java.util.List;

/*
题目要求:
* 输入字符串:
"This is a sample",16

返回值:
"SAMPLE A IS tHIS"*/
public class Solut2 {
    public static void main(String[] args) {
        Solut2 solut2 = new Solut2();
        String this_is_a_sample = solut2.trans("nowcoder",8);
        System.out.println(this_is_a_sample);
    }

    /**
     *
     * @param s
     * @param n
     * @return
     */
    public String trans(String s, int n) {
        //第一步:利用str.split将字符串分割成字符数组
        String[] strings = s.split(" ");//将字符串分割成字符数组:
        //第二步:倒序取出字符串数组
        StringBuffer res = new StringBuffer();
        for (int i = strings.length-1; i >= 0; i--) {
            //System.out.println(strings[i]);
            //大小写转换
            StringBuffer stringWord = new StringBuffer(strings[i]);
            //遍历单词sample
            for (int j = 0; j < stringWord.length(); j++) {//遍历单词数组
                if(stringWord.charAt(j)>='A' && stringWord.charAt(j)<='Z'){
                    stringWord=stringWord.replace(j,j+1, 
                            String.valueOf((char) (stringWord.charAt(j) + 32)));
                }else if(stringWord.charAt(j)>='a' && stringWord.charAt(j)<='z'){
                    stringWord =stringWord.replace(j,j+1, 
                            String.valueOf((char) (stringWord.charAt(j)-32)));
                }else{
                    stringWord =stringWord.replace(j,j+1, " " );
                }
            }
            System.out.println("大小写后的:"+stringWord);
            res.append(stringWord).append(" ");
        }
        //去掉最后一个空格
        res.deleteCharAt(n);
        return res.toString();
    }
}


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

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

相关文章

RabbitMQ 服务启动失败问题小结(Windows环境)

RabbitMQ 服务启动失败问题小结&#xff08;Windows环境&#xff09; 最近在Windows环境上安装RabbitMQ服务时&#xff0c;踩了不少坑&#xff0c;往上的回答让人很崩溃&#xff0c;几乎一样的回答&#xff0c;起不到帮助作用&#xff1b;特此做个记录总结&#xff1b; *****…

Nginx缓存配置教程

问题引出 假设某电商平台商品详情页需要实现 700 QPS&#xff08;假设宽带是千兆宽带&#xff09; 千M局域网宽带网卡速率按照1000进位&#xff0c;所以1Gbps1,000,000,000bps125,000,000Bps≈119.21MB/s 当达到500QPS 的时候很难继续压测上去。 假设每个页面主体渲染所需要的…

java的static关键字及类加载顺序

Java中static可以修饰类、变量、方法甚至可以构成静态块&#xff0c;让我们来了解下它们各自的使用以及加载顺序吧。 基本用法 static关键字修饰类 java里面用static修饰内部类&#xff0c;普通类是不允许声明为静态的&#xff0c;只有内部类才可以。 public class StaticT…

苹果电脑硬盘读写软件有哪些?Tuxera NTFS2023mac读写硬盘软件

格式化是将硬盘重置到初始状态或者是转换硬盘格式所需的一项重要步骤&#xff0c;格式化可以解决大部分用户遇到的硬盘问题&#xff0c;不过在进行格式化之前&#xff0c;大家需要提前了解格式化的具体注意事项&#xff0c;以避免不必要的损失。下面本文就来着重介绍磁盘格式化…

windows xp 邮件服务器漏洞溢出

缓冲区溢出攻击过程概念解释&#xff1a;第一步&#xff1a;入侵着测试目标机的25和110端口第二步&#xff1a;入侵着测试目标机缓冲区溢出第三步&#xff1a;判断目标机器是否发生缓冲区溢出第四步&#xff1a;得到确切缓冲区溢出位置所在的区间。第五步&#xff1a;得到确切缓…

基于低代码开发平台搭建的生产制造管理系统

在现代化社会中&#xff0c;信息化管理模式早已成为企业管理的主流趋势。尤其是随着企业信息化的程度已经成为影响企业创新、发展以和企业经济效益的重要因素之后&#xff0c;生产管理信息化就变得至关重要。因此&#xff0c;拥有一套完备的生产制造管理系统对于提高企业的工作…

Nginx安全控制

安全隔离 通过代理分开了客户端到应用程序服务器端的连接&#xff0c;实现了安全措施。在反向代理之前设置防火墙&#xff0c;仅留一个入口供代理服务器访问。 使用SSL对流量进行加密 常用的http请求转变成https请求&#xff0c;因为http协议是明文传输数据&#xff0c;存在…

黑马redis学习记录Ⅲ SpringDataRedis客户端

学习视频&#xff1a;https://www.bilibili.com/video/BV1cr4y1671t/ SpringDataRedis客户端 SpringData 是 Spring 中数据操作的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中对 Redis 的集成模块就叫做 SpringDataRedis&#xff0c;官网地址&#xff1a;https://…

基于eNSP中大型校园/企业网络规划与设计_综合大作业

作者&#xff1a;BSXY_19计科_陈永跃BSXY_信息学院注&#xff1a;未经允许禁止转发任何内容基于eNSP中大型校园/企业网络规划与设计_综合大作业前言及技术/资源下载说明&#xff08; **未经允许禁止转发任何内容** &#xff09;一、设计topo图与设计要求(简单列举18个)二、相应…

漏洞深度分析|Apache Airflow example_bash_operator DAG 远程代码执行漏洞

项目介绍 Airflow 是一个使用 python 语言编写的 data pipeline 调度和监控工作流的平台。 Airflow 是通过 DAG&#xff08;Directed acyclic graph 有向无环图&#xff09;来管理任务流程的任务调度工具&#xff0c; 不需要知道业务数据的具体内容&#xff0c;设置任务的依赖…

Vue实现搜索关键字标红高亮加粗

博主介绍 &#x1f4e2;点击下列内容可跳转对应的界面&#xff0c;查看更多精彩内容&#xff01; &#x1f34e;主页&#xff1a;水香木鱼 &#x1f34d;专栏&#xff1a;后台管理系统 文章目录 简介&#xff1a;这是一篇有关【Vue实现搜索关键字标红高亮加粗】的文章&#xf…

光流法draw_flow()函数报错

光流法draw_flow()函数报错 1 import cv22 from scipy import *3 4 5 def draw_flow(im, flow, step16):6 """ Plot optical flow at sample points7 spaced step pixels apart. """8 h, w im.shape[:2]9 y, x mgrid[step / 2…

苹果电脑pd工具箱Parallels Toolbox中文

ParallelsToolbox中文版是一款体积小巧、功能齐全的电脑系统工具箱&#xff0c;Parallels Toolbox将所有的功能均非常直观的展现出来了&#xff0c;在这里可以轻松实现驱动器清理、视频转换、桌面隐藏、锁定屏幕、音频录制等一系列操作。 专为创意人士、学生、小企业主、长期多…

这些基本语法规则你还不知道?那你的Python还没入门...

官方对Python的介绍如下&#xff1a;Python是一款易于学习且功能强大的编程语言。它具有高效率的数据结构&#xff0c;能够简单又有效地实现面向对象编程。 Python有着非广泛的应用&#xff0c;几乎所有大中型互联网公司都在使用Python&#xff0c;例如国外的Google、Youtube、…

AutoDL算力租用,Mobaxterm+Pycharm+VScode通过SSH连接远程服务器AutoDL

上干货&#xff1a; 一 、AutoDL算力租用平台使用 https://www.autodl.com/register?codef8e175e4-67c3-4cca-b120-09b11caaf2e6 第一步先注册&#xff0c;新注册的有免费十块代金劵&#xff0c;提供免费体验一下&#xff0c;本想白嫖&#xff0c;一体验&#xff0c;直接上车…

重塑感知,荣耀金洋!金洋奖两项用户体验奖项公布

11月17日&#xff0c;银行APP用户体验外滩峰会圆满落幕。其间&#xff0c;金洋奖用户体验APP Top20、金洋奖适老化及无障碍体验APP Top10两项用户体验类奖项重磅颁出&#xff0c;聚焦用户体验&#xff0c;发现和挖掘业内用户体验优秀实践案例&#xff0c;助力行业提升APP用户体…

已有项目与git建立连接、老项目搭建git管理

最近接手了一个已经上线很久的项目&#xff0c;原来都是ftp进行修改&#xff0c;所以谁改的改了什么都没有记录&#xff0c;决定给这个项目加上git。 首先由于项目在线上服务器我没有直接在线上进行git远程库的上传&#xff0c;所以ftp把整个项目都拉到本地之后进行的操作。 一…

prometheus安装和oracle告警配置

一、安装Prometheus 通过git下载新版本promethus mv prometheus-2.40.1.linux-amd64.tar.gz /usr/local/ cd /usr/local tar zxvf prometheus-2.40.1.linux-amd64.tar.gz cd /usr/local/prometheus-2.40.1.linux-amd64 vim prometheus.yml global:scrape_interval: 15s # S…

BDD - SpecFlow Driver Pattern 驱动模式

BDD - SpecFlow Driver Pattern 驱动模式引言Driver Pattern 的优势举例不用 Driver Pattern运用 Driver Pattern引言 前面 《 BDD - SpecFlow Page Object Model POM 》介绍了 POM 模式&#xff0c;用于提取 Web UI 元素封装成 Page Object 类&#xff0c;今天介绍另外一种 D…

电子统计台账:处理时间与名称所在行有交错的流水账格式

目录 1 新建项目 2 水平过滤模板 3 垂直过滤模板是重点 实际工作中&#xff0c;各种千奇百怪的事情都能遇上。本来普通格式的流水账可以处理了还挺高兴&#xff0c;一下子又来了这样的数据格式&#xff0c;居然名称前面根本没有日期这样的流水账&#xff1a; 这种情况还是需…