Leetcode541/151之String与char数组与StringBuffer
String与char数组与StringBuffer
- 通常情况下遇到删除字符或者反转字符串时需要将String转为char数组或者StringBuffer
String与char数组
- char [] stringArr = string.toCharArray();
- char[] charArray = {'P','A','N','K','A','J'}; String str = new String(charArray);
StringBuffer常用方法
- StringBuffer stb=new StringBuffer();//里面也能放char数组或者string
- stb.appdend(char c)
- stb.insert(int index, char c)
- stb.delete(int start,int edn)
- stb.deleteChatAt(int index)
- stb.length()
- stb.replace(int start, int end, String str)
- stb.reverse()
Leetcode541-反转字符串二
- 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
- 如果剩余字符少于
k个,则将剩余字符全部反转 - 如果剩余字符小于
2k但大于或等于k个,则反转前k个字符,其余字符保持原样 - 输入:s = "abcdefg", k = 2
- 输出:"bacdfeg"
public String reverseStr1(String s, int k) {
char[] c=s.toCharArray();
for(int i=0;i<s.length();i=i+2*k){
if((i+k)<=s.length()){
reverse(c,i,i+k-1);
}else{
int len=s.length()-i;
reverse(c,i,i+len-1);
}
}
return new String(c);
}
public static void reverse(char[] c,int left,int right){
while (left<right){
char temp = c[left];
c[left]=c[right];
c[right]=temp;
left++;
right--;
}
}
public String reverseStr2(String s, int k) {
StringBuffer res=new StringBuffer();
for(int i=0;i<s.length();i=i+2*k){
if((i+k)<s.length()){
StringBuffer temp1=new StringBuffer(s.substring(i,i+k));
temp1.reverse();
res.append(temp1);
if((i+2*k)<s.length()){
res.append(s.substring(i+k,i+2*k));
}else{
int len=s.length()-(i+k);
res.append(s.substring(i+k,i+k+len));
}
}else{
int len=s.length()-i;
StringBuffer temp2=new StringBuffer(s.substring(i,i+len));
temp2.reverse();
res.append(temp2);
}
}
return new String(res);
}
Leetcode151-颠倒字符串中的单词
- 给你一个字符串
s,颠倒字符串中 单词 的顺序。 - 单词 是由非空格字符组成的字符串。
s中使用至少一个空格将字符串中的 单词 分隔开。 - 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
- 注意:输入字符串
s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。 - 输入:s = "the sky is blue"
- 输出:"blue is sky the"
//string的trim以及+,charat要熟练使用
public class L151 {
public static String reverseWords1(String s) {
String trim = s.trim();
String result = new String();
String temp = new String();
for (int i = 0; i < trim.length(); i++) {
char c = trim.charAt(i);
if (c == ' ') {//遇到新的单词了
result = temp + " " + result;
temp = new String();
while (i + 1 < trim.length() && trim.charAt(i + 1) == ' ') {
i++;
}
} else {
temp = temp + c;
}
}
result = temp + " " + result;
result = result.trim();
return result;
}
//方法二使用StringBuffer 效率更高
public String reverseWords2(String s) {
StringBuffer res=new StringBuffer();
LinkedList<Character> stack=new LinkedList();
for(int i=s.length()-1;i>=0;i--){
Character tempChar=s.charAt(i);
if(tempChar!=' '){
stack.addFirst(tempChar);
}else{
boolean flag=false;
while(!stack.isEmpty()){
flag=true;
res.append(stack.removeFirst());
}
if(flag==true){
res.append(" ");
//只有加过字母才需要加空格
//但是这里无法筛选调最后的空格
//一种方式是和上面一样使用trim
//另一种方法是在下面对其特殊处理
}
}
}
//最后栈中的元素特殊处理
while(!stack.isEmpty()){
res.append(stack.removeFirst());
}
if (res.charAt(res.length() - 1)==' ') {
res.deleteCharAt(res.length() - 1);
}
return new String(res);
}
public static void main(String[] args) {
String s = "aa bb cc";
String res = reverseWords1(s);
System.out.println(res);
}
}
Leetcode541/151之String与char数组与StringBuffer的更多相关文章
- PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组转换
PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组之间的转换关系见下图 通过转换链,可以实现任意两个类型之间的互转.如PChar转PAnsiChar ...
- 【转】C# String 与 Char[] 数组 相互转换
源地址:http://blog.csdn.net/razilfelix/article/details/52289663 string 转换成 Char[] string ss = "abc ...
- delphi char数组、string和Pchar的相互转换
因为要调用windows的api或者给vc++写接口,很多地方都要用到pchar,现在将char数组.string和pchar之间的相互转换都列出来,都是网上找的资料,我总结一下,先直接上代码,再讲原 ...
- char数组与string转换
1.char数组转string 有很多种方法: 假设c字符串定义为char ch[]="hello world!"; 1.向构造函数传入c字符串创建string对象: string ...
- Java基础之引用(String,char[],Integer)总结
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- string 与 char 的区别
1.char是字符类型 2.string是字符串类型 虽然一字之差,但其本质是很大的. 1. char属于基础类型(C++),在C#中它属于值类型(Value Type).char类型的长度是固定的, ...
- Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- 类型转换 String——》Char OR Char ——》String
String转换为char 在Java中将String转换为char是非常简单的.1. 使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char.2 ...
- Delphi中的各种字符串、String、PChar、Char数组
参考博客:http://www.cnblogs.com/pchmonster/archive/2011/12/14/2287686.html 其中的所有代码均在Delphi7下测试通过. Delphi ...
随机推荐
- ospf应用简单
ospf应用简单 OSPF (SPF) 属于链路状态路由选择协议,并且是公有标准, 理论上是没有网络规模限制的: 支持网络的层次化设计,可以将网络分为2层. 层,是通过"区域" ...
- Window7环境下安装Scrapy 方法
Window7环境下安装Scrapy Scrapy在CPython(默认Python实现)和PyPy(从PyPy 5.9开始)下运行Python 2.7和Python 3.4或更高版本. 如果您使用的 ...
- C#/Vsto中CustomTaskPanes和Ribbon的使用方法
在工作中有一个需求,需要添加工作区选项卡,Excel中CustomTaskPanes面板很适合这样的场景,而非集中处理在Excel的Ribbon面板中,毕竟在大型项目中表现层已经过于复杂了.首先写一个 ...
- 使用Typora做笔记
本文旨在分享使用Typora做笔记的一些心得 一.介绍 为什么要用Typora 作为一个程序员,在学习过程中打交道的不单单是文字,还有各种语言的代码块和公式,以及一些简单的流程图和思维导图(就目前而言 ...
- RabbitMQ在开发环境搭建-转载
1.安装erlang. rabbitmq 安装需要erlang 的支持,所有安装rabbitmq 之前需要现安装erlang.下载 erlang: https://www.erlang.org/dow ...
- Java中对文件的处理01-递归删除
package com.ricoh.rapp.ezcx.admintoolweb.util; import java.io.BufferedInputStream; import java.io.Bu ...
- 《前端运维》五、k8s--1安装与基本配置
一.k8s基础概念与安装 k8s,即kubernetes是用于自动部署,扩展和管理容器化应用程序的开源系统.详细的描述就不多说了,官网有更详细的内容.简单来说,k8s,是一个可以操作多台机器调度部署镜 ...
- Servlet的会话机制?
因为http协议是无状态协议,又称为一次性连接,所以webapp必须有一种机制 能够记住用户的一系列操作,并且唯一标示一个用户. Cookie: 又称为小饼干,实际就是使用一个短文本保存用户信息, 在 ...
- 为什么等待和通知是在 Object 类而不是 Thread 中声明的?
一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢.Java编程的常识和深入了解有助于回答这种棘手的 Java 核心方面的面试问题.为什么 wait,notify ...
- 在JAVA中如何跳出当前的多重嵌套循环?
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环.