Java_13 反转字符串中的单词 III(方法一将String改为StringBuilder)

一、反转字符串中的单词 III


给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:

输入: s = "Mr Ding"
输出:"rM gniD"
 

提示:

1 <= s.length <= 5 * 104
s 包含可打印的 ASCII 字符。
s 不包含任何开头或结尾空格。
s 里 至少 有一个词。
s 中的所有单词都用一个空格隔开。
相关标签

Java

作者:LeetCode
链接:https://leetcode.cn/leetbook/read/array-and-string/c8su7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


二、c++解答

c语言,位运算


void fanzhuan(char* s,int first,int last);
char * reverseWords(char * s){
    int slow=0,fast=0,s_length=strlen(s);
    while(1)
    {
        if((s[fast+1]==' '||s[fast+1]=='\0')&&s[fast]!=' ')
        {
            fanzhuan(s,slow,fast);
            if(fast+1==s_length)return s;
            slow=fast+2;
        }
        fast++;
    }
}
void fanzhuan(char*s,int first,int last)
{
    while(first<last)
    {
        s[first]=s[first]^s[last];
        s[last]=s[first]^s[last];
        s[first]=s[first]^s[last];
        first++;
        last--;
    }
}


作者:leeya_bug
链接:https://leetcode.cn/leetbook/read/array-and-string/c8su7/?discussion=3lLx6L
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


 三、Java解答整体过程

1.路途耳目新

1.1额外定义变量实现反转

不能用slow 和fast直接换顺序,是全局变量,后面的遍历字符串会受影响

1.2Java String、 StringBuilder

1.2.1

无法像数组那般通过s[index]获得,在index索引对应的值,需要通过s.charAt(index)获得

Java String 类

Java String类的常用方法使用方法

1.2.2

char a=s1.charAt(fast);

得到的是char类型,只能和''同类型比较,不能和" "(字符串)

1.2.3

The left-hand side of an assignment must be a variable

String是不可变的,转换成StringBuilder,使用s1.setCharAt(index,temp)

Java——StringBuilder与String相互转换

Java-修改 String 指定位置的字符最全方法总结(StringBuilder 和 StringBuffer 的使用以及区别)

1.2.4

The method setCharAt(int, char) in the type AbstractStringBuilder is not applicable for the arguments (int, int)

1.2.5

String类的结尾并没‘\0'字符,参考方法受限

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: index 27, length 27

因此用if-else if 对最后一个单词实现单独的顺序反转

针对于溢出,进行了调试

如何用Eclipse调试(debug)Java代码?

1.3异或运算^

c++位运算符 | & ^ ~ && ||,补码,反码

^ 运算---------------------------不同则为1,相同则为0 // 当且仅当两个运算值中有一个为1但不同时为1时,返回值为1

0^1=1;
1^0=1;

1^1=0;

0^0=0;

00111

 ^           =11011
11100

^运算通常用于对二进制的特定一位进行取反操作,^运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a^b)^b=a;

^运算可以用于简单的加密,比如原始值int a = 19880516;密钥 int key =1314520; 进行加密 int data=key^a = 20665500;解密 data^key == a;
^运算还可以实现两个值的交换而不需要中间变量,例如:

先看加减法中交换实现
void swap(long int &a,long int &b)

{
     a = a+b;

     b = a-b;

     a = a-b;

}

void swap(long int &a,long int &b)

{
    a = a^b;

    b = a^b;

    a = a^b;

}

所以 ^运算可以理解成类似加法(+)记忆 , 1+1 =0,1+0 =1,0+1 =1;0+0 =0;//因为机器码是二进制,1+1=2%2 =0,其实不然
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/wuguai4/article/details/7311953

1.4如何用Eclipse调试(debug)Java代码?

如何用Eclipse调试(debug)Java代码?

2.最终结果-完整代码

package Day3_19;public class Test13 {public static String reverseWords(String s) {StringBuilder s1= new StringBuilder(s);int len=s.length();int i=0,slow=0,fast=0;int first=0,last=0;char temp=' ';for(fast=0;fast<len;fast++){/*if(s[fast+1]==" "||s[fast+1]=="\0"){while(slow<fast){s[slow]=s[slow]^s[fast];s[fast]=s[fast]^s[slow];s[slow]=s[slow]^s[fast];fast++;last--;}}不能用slow 和fast直接换顺序,是全局变量,后面的遍历字符串会受影响*///char a=s1.charAt(fast);//得到的是char类型,只能和''同类型比较,不能和" "(字符串)if(fast==len-1) {first=slow;last=fast;while(first<last) {temp=s1.charAt(first);s1.setCharAt(first, s1.charAt(last));s1.setCharAt(last, temp);first++;last--;}}else if(s1.charAt(fast+1)==' '){first=slow;last=fast;while(first<last){/*//The left-hand side of an assignment must be a variable//只能根据索引获得对应的字符,但是没有办法赋值s.charAt(first)=s.charAt(first)^s.charAt(last);s.charAt(last)=s.charAt(first)^s.charAt(last);s.charAt(first)=s.charAt(first)^s.charAt(last);*//*s1.setCharAt(first,s1.charAt(first)^s1.charAt(last));s1.charAt(last)=s1.charAt(first)^s1.charAt(last);s1.charAt(first)=s1.charAt(first)^s1.charAt(last);//The method setCharAt(int, char) in the type AbstractStringBuilder //is not applicable for the arguments (int, int)*/temp=s1.charAt(first);s1.setCharAt(first, s1.charAt(last));s1.setCharAt(last, temp);first++;last--;}if(fast==len-1) {s=s1.toString();return s;	}slow=fast+2;}//fast++;}s=s1.toString();return s;   }public static void main(String[] args) {String s="Let's take LeetCode contest";//reverseWords(s);System.out.println(reverseWords(s));}}

四总结

1.对全局变量认识加深,在写的时候有所思考👍

2.对于Java的String 类和StringBuider类需要加深学习和思考,途中很多坎坷都是因为不知💪

3.位运算了解掌握🤔

4.eclipse调试get(之前就想着学,这次会了!)👍

5.不同语言之间的差异明显感知🤔

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据之谜:解读Facebook的用户行为

在当今数字化时代&#xff0c;社交媒体平台已经成为人们生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交网络之一&#xff0c;其背后隐藏着许多数据之谜。本文将深入探讨Facebook的用户行为&#xff0c;并试图解读其中的奥秘。 用户行为数据的收集 Facebook作…

在Arm 虚拟硬件(AVH)部署深度学习OCR算法

AI算法的嵌入式部署 AI算法在独立的设备上运行其实就是行业内的嵌入式AI的概念, 大致过程如下: 开发AI模型, 2.对数据集进行处理, 3.训练AI模型并验证效果, 4.转成ONNX格式(ONNX:万金油中间格式,给模型优化和部署带来了更多可能性)或者借助libtorch或者TensorFlow来部署C++版…

CSS学习(3)-浮动和定位

一、浮动 1. 元素浮动后的特点 脱离文档流。不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽可能小&#xff09;&#xff0c;而且可以设置宽 高。不会独占一行&#xff0c;可以与其他元素共用一行。不会 margin 合并&#xff0c;…

json字符串的数据提取

json的数据提取 学习目标 掌握 json相关的方法(load loads dump dumps)了解 jsonpath的使用(提取 json中的数据) 2 复习什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和…

【LeetCode: 173. 二叉搜索树迭代器 + dfs + 二叉搜索树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

docker入门(五)—— 小练习,docker安装nginx、elasticsearch

练习 docker 安装 nginx # 搜素镜像 [rootiZbp15293q8kgzhur7n6kvZ home]# docker search nginx NAME DESCRIPTION STARS OFFICIAL nginx …

SpringBoot中使用验证码easy-captcha

easy-captcha使用的大概逻辑: 当一个请求发送到后端服务器请求验证,服务器使用easy-captcha生成一个验证码图片,并通过session将验证信息保存在服务器,当用户登录校验时候,会从ession中取出对比是否一致 但是前后端分离之后 由于跨域问题 以上就无法实现了 下面这种情况没…

SpringBoot打造企业级进销存储系统 第五讲

package com.java1234.repository;import com.java1234.entity.Menu; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;import java.util.List;/*** 菜单Repository接口*/ public interface MenuReposit…

【机器学习-05】模型的评估与选择

在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程&#xff0c;本章我们将介绍模型训练出来后如何对模型进行评估和选择等 1、 误差与过拟合 学习器对样本的实际预测结果与真实值之间的差异&#xff0c;我们称之…

小米手机官方解锁

1、官方说要申请&#xff0c;还要等几天&#xff0c;反正现在2024-03-20是不需要的&#xff0c;直接下载解锁工具 2、解锁工具下载 3、工具登录后按钮一直灰色&#xff0c;我跑去下载了个驱动根本没用。正确方法是按照上面说的操作后&#xff0c;进入那个有个兔子戴帽子的状态…

Mock.js了解(Mock就是模拟一个后端,Postman模拟前端)

Mock.js 基于 数据模板 生成模拟数据。基于 HTML模板 生成模拟数据。拦截并模拟 ajax 请求。 基本语法 DTD&#xff08;数据模板定义规范&#xff09; 数据模板的每个属性由3部分构成&#xff1a;属性名、生成规则、属性值&#xff08;‘name|rule’: value&#xff09; 属性名…

pytorch 实现线性回归(Pytorch 03)

一 从零实现线性回归 1.1 生成训练数据 原始 计算公式&#xff0c; 我们先使用该公式生成一批数据&#xff0c;然后使用 结果数据去计算 计算 w1, w2 和 b。 %matplotlib inline import random import torch from d2l import torch as d2ldef synthetic_data(w, b, num_ex…

[蓝桥杯 2015 省 B] 生命之树

水一水的入门树形DP #include<iostream> #include<algorithm> #include<vector> using namespace std; using ll long long; #define int long long const int N 2e610; const int inf 0x3f3f3f3f; const int mod 1e97;int n; int w[N]; vector<vecto…

播下代码的种子,收获应用的果实

春分时节&#xff0c;大地回暖&#xff0c;万物复苏&#xff0c;生机勃勃。这是一个充满活力和希望的季节&#xff0c;也是启动新计划和项目的绝佳时机。在这个充满希望的季节里&#xff0c;Codigger作为一款强大的工具&#xff0c;正等待着为您的项目和计划提供坚实的支持。 C…

【Python循环6/6】循环的综合运用

目录 回顾 for循环遍历列表 for循环进行累加/累乘的计算 复杂的条件判断 嵌套 嵌套循环 练习 遍历整数列表 总结 回顾 在之前的博文中&#xff0c;我们学习了for计数循环&#xff1b;while条件循环&#xff1b;以及跳出循环的两种方法break&#xff0c;continu…

相机拍照与摄影学基础

1.相机拍照 相机可能形状和大小不同&#xff0c;但基本功能相同&#xff0c;包括快门速度、光圈和感光度&#xff0c;这些是摄影的通用概念。即使是一次性相机也是基于这三个理念工作的。不同类型相机在这三个概念上的唯一区别是你可以控制这些功能的程度。这三个参数被称为相…

爬虫Day3

用到的网页--豆瓣电影Top250 需要爬取信息&#xff1a; 数据保存在网页源代码中&#xff0c;是服务加载方式。先拿到网页源代码--request。再通过re提取想要的信息---re。 新知识&#xff1a;用csv存数据&#xff0c;可以用excel表格展示数据 import csv result obj.findite…

外包干了28天,技术退步明显......

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

[项目设计]基于websocket实现网络对战五子棋

项目介绍 该项目旨在实现一个网页端的在线五子棋&#xff0c;将实现登陆、好友、房间、对战、观战、聊天等功能 完成该项目需要了解C、数据库MySQL、基础前端HTML/CSS/JS/Ajax、网络协议WebSocket 项目源码&#xff1a;azhe1/online_gobang - 码云 - 开源中国 (gitee.com) …

【Spring Cloud Gateway】路由配置uri三种方式及区别

websocket配置方式 ws:// 或 wss:// 开头的 URI&#xff0c;表示配置的是支持 Websocket 协议的目标地址。 这种方式适用于需要与客户端建立长连接、实现双向通信的场景&#xff0c;比如实时消息推送、即时聊天等。 使用 Websocket 配置方式可以让 Spring Cloud Gateway 能够…