剑指offer——左旋转字符串

剑指offer——左旋转字符串

1 题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

2 知识点复习

Java从入门到精通——字符串

2.1 队列

Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接口。

常见方法:

  add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常

  remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

  element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  
  offer 添加一个元素并返回true 如果队列已满,则返回false
  
  poll 移除并返问队列头部的元素 如果队列为空,则返回null
  
  peek 返回队列头部的元素 如果队列为空,则返回null
  
  put 添加一个元素 如果队列满,则阻塞
  
  take 移除并返回队列头部的元素 如果队列为空,则阻塞

2.2 java字符串常用操作(查找、截取、分割)

public class 字符串常用操作 {

    public static void main(String[] args) {
        /*
         * 查找子串
         */
        String str1="dwqae12232aebdalf";
        //查找指定字符第一次出现的位置
        int first1=str1.indexOf(97);//参数为字符的ascii码
        //查找指定字符串第一次出现的位置
        int first2=str1.indexOf("12");
        //查找指定字符第一次出现的位置,从索引处开始(包括索引处)
        int first3=str1.indexOf(97, 0);
        //查找指定字符串第一次出现的位置,从索引处开始(包括索引处
        int first4=str1.indexOf("12232",0);
        System.out.println("first1="+first1);
        System.out.println("first1="+first2);
        System.out.println("first1="+first3);
        System.out.println("first1="+first4);
        System.out.println("-------------");
        /*
         * 截取字符串
         */
        //从索引处到末尾(不包括索引处)
        String substr1=str1.substring(5);
        //指定区间(包括结束索引处)
        String substr2=str1.substring(5, 10);
        System.out.println("substr1="+substr1);
        System.out.println("substr2="+substr2);
        System.out.println("-------------");
        /*
         * 分割字符串
         */
        //以a为分割字符
        String[] splitstr=str1.split("a");
        for(String res : splitstr){
            System.out.println(res);
        }
        //注:如果分割字符为正则表达式里的字符,则需要"\"做转义
    }

}

输出结果:
first1=3
first1=5
first1=3
first1=5
-------------
substr1=12232aebdalf
substr2=12232
-------------
dwq
e12232
ebd
l

3 题目解答

import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    //利用队列
    public String LeftRotateString(String str,int n) {
        int len=str.length();
        if(n>len){
            return "";
        }
        Queue<String> queue=new LinkedList<String>();
        for(int i=0;i<n;i++){
            queue.add(String.valueOf(str.charAt(i)));//char变为String类型
        }
        str=str.substring(n);//一定要注意s为小写!!!
        while(!queue.isEmpty()){
            str=str+queue.poll();
        }
        return str;
    }
}

4 其它解法

可以直接利用字符串,把原字符串截取,拼接

public class Solution {
    public String LeftRotateString(String str,int n) {
        int len=str.length();
        if(n>len){
            return "";
        }
        String str1=str.substring(0,n);//截取
        String str2=str.substring(n,len);
        return str2+str1;
    }
}

猜你喜欢

转载自blog.csdn.net/yangxingpa/article/details/80709141