• BM83 字符串变形


    描述

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

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

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

    数据范围: 1\le n \le 10^61≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。

    进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)

    输入描述:

    给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)

    返回值描述:

    请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

    示例1

    输入:"This is a sample",16

    返回值:"SAMPLE A IS tHIS"

    示例2

    输入:"nowcoder",8

    返回值:"NOWCODER"

    示例3

    输入:"iOS",3

    返回值:"Ios"

    分析:

    可以选择栈作为实现逆序的容器。

    split用来拆分字符串。

    1.如果字符串最后一位有值,则没有区别,

    2.若干最后n位都是切割符,split(" ")不会继续切分,split(" ", -1)会继续切分

    注意StringBuilder的用法。

    1. import java.util.*;
    2. public class Solution {
    3. public String trans(String s, int n) {
    4. // write code here
    5. Stack<String> sk = new Stack<String>();
    6. StringBuilder str = new StringBuilder();
    7. StringBuilder ans = new StringBuilder();
    8. s += ' ';
    9. for(int i = 0;i <= n;i++){
    10. if(s.charAt(i) == ' '){
    11. sk.push(str.toString());
    12. str = new StringBuilder();
    13. }else{
    14. if(s.charAt(i) <= 'z'&&s.charAt(i) >= 'a')
    15. str.append((char)(s.charAt(i) - 'a' + 'A'));
    16. if(s.charAt(i) <= 'Z'&&s.charAt(i) >= 'A')
    17. str.append((char)(s.charAt(i) - 'A' + 'a'));
    18. }
    19. }
    20. while(!sk.empty()){
    21. ans.append(sk.peek());
    22. sk.pop();
    23. ans.append(' ');
    24. }
    25. ans.deleteCharAt(n);
    26. return ans.toString();
    27. }
    28. }

    提交结果:答案正确 运行时间:252ms 占用内存:41004KB 使用语言:Java 用例通过率:100.00%

  • 相关阅读:
    专利文献的参考文献格式是什么?
    放大招,百度文心大模型4.0正在加紧训练,即将发布
    「随笔」浅谈2023年云计算的发展趋势
    【无标题】
    封装Detours用于Python中x64函数hook
    Django-Multitenant,分布式多租户数据库项目实战(Python/Django+Postgres+Citus)
    Docker简介
    Vue08/Vue 配置路由规则 、Vue声明式导航、声明式导航传参接收两种方式
    51单片机-直流电机学习
    MACOS arco design 初学者踩坑指南
  • 原文地址:https://blog.csdn.net/renxingzhadan/article/details/125475737