剑指offer——左旋转字符串
1 题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
2 知识点复习
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;
}
}