美文网首页
字符串的旋转与翻转

字符串的旋转与翻转

作者: baobaodz | 来源:发表于2018-06-07 21:03 被阅读103次

字符串旋转

题目描述
对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。
给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。
测试样例:

"ABCDEFGH",8,4

返回:"FGHABCDE"

利用String类的substring方法截取子字符串就OK了

import java.util.*;

public class StringRotation {
    public String rotateString(String A, int n, int p) {
        
        if(p==n-1){
            return A;
        }else{
             return A.substring(p+1,n)+A.substring(0,p+1);
        }    
    }
}

字符串翻转

题目描述
请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。
给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。
测试样例:

"This is nowcoder"
返回:"redocwon si sihT"

这道题首先想到的就是利用循环让字符串逆序输出,然后存储到一个数组里,然后再将数组转化成字符串形式。

import java.util.*;

public class Reverse {
    public String reverseString(String str) {
        
       char[] a = new char[str.length()];
        for(int i=str.length()-1;i>=0;i--){
            
                a[str.length()-1-i] = str.charAt(i);
            }
   
        String s = String.copyValueOf(a);
        return s;
    }
}

有点麻烦。后来知道StringBuffer类有个reverse方法,更简单。。。
java中String类一旦定义后就不可改变了,而StringBuffer类正好弥补了它的缺陷。

package com.nowcoder.test;

public class Reverse2 {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StringBuffer sb = new StringBuffer("hello world");
        StringBuffer s = sb.reverse();
        System.out.println(s);
    }
}

关于String、StringBuffer、StringBuilder的区别

简单来说

  • String 长度大小不可变
  • StringBuffer 和 StringBuilder 长度可变
  • StringBuffer 线程安全 StringBuilder 线程不安全
  • StringBuilder 速度快
    综上来看,平常在处理字符串变化问题上应该常用StringBuilder类。

StringBuilder常用方法

关于StringBuilder类的常用方法,在这里总结一下。

append(String str)追加

该方法的作用是追加内容到当前StringBuilder对象的末尾,类似于字符串的连接。调用该方法以后,StringBuilder对象的内容也发生改变,例如:

String str = "coding";
        
StringBuilder sb = new StringBuilder("hello world!");
//追加
StringBuilder s1 = sb.append(str);
System.out.println(s1);
//hello world!coding
deleteCharAt(int index)删除

该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:

StringBuilder sb = new StringBuilder("hello world!");
//删除
StringBuilder s2 = sb.deleteCharAt(5);
System.out.println(s2);
//helloworld!coding
insert(int index,String str)插入

该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:

StringBuilder sb = new StringBuilder("hello world!");

//插入
StringBuilder s3 = sb.insert(5,"?");
System.out.println(s3);
//hello?world!coding
setcharAt(int index,char ch)设置

该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。

StringBuilder sb = new StringBuilder("hello world!");

//设置,不返回值
sb.setCharAt(0,'k');
System.out.println(sb.setCharAt(0,'k'));
//kello world!
reserve()翻转
StringBuilder sb = new StringBuilder("hello world!");

//翻转
StringBuilder s4 = sb.reverse();    
System.out.println(s4);

相关文章

  • 字符串的旋转与翻转

    字符串旋转 题目描述对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将...

  • 矩形数组的各种翻转旋转

    矩形数组水平翻转、垂直翻转、对角线翻转、逆时针旋转、顺时针旋转。 1、翻转 1.1、水平翻转 使二维数组进行水平翻...

  • JS基础09-17

    数组面向对象创建 直接创建 数组嵌套 数组字符拼接 数组去重 字符串字符串翻转/字符串翻转---线分割数组,翻转,...

  • OpenGL 图片翻转的5种策略

    iOS纹理翻转解决策略 第1种: 旋转矩阵翻转图形,不翻转纹理 让图形顶点坐标旋转180°. 而纹理保持原状. 第...

  • 13.3.4 图片的旋转和翻转

    13.3.4 图片的旋转和翻转

  • OpenGL ES(五)-纹理翻转解决策略

    一、旋转矩阵翻转图形,不翻转纹理 让图形顶点坐标旋转180°. 而纹理保持原状. 二、解压图片时,将图片源文件翻转...

  • OpenGLES 2 (翻)

    OpenGLES 2 翻转策略 方案一:图形顶点翻转180°,纹理保持原状 图形顶点利用旋转矩阵旋转180°,如图...

  • 初级脚本算法

    1.翻转字符串算法挑战 实战翻转字符串算法你可以先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,...

  • freeCodeCamp 初级javascript算法体验

    1、翻转字符串(Reverse a String) 翻转字符串先把字符串转化成数组,再借助数组的reverse方法...

  • 10 个 Python 初学者必知编码小技巧

    字符串翻转 a = "codementor">>> print "Reverse is",a[::-1]翻转后的结...

网友评论

      本文标题:字符串的旋转与翻转

      本文链接:https://www.haomeiwen.com/subject/ancnsftx.html