当前位置: 代码迷 >> 综合 >> 剑指offer第四十三题左旋转字符串
  详细解决方案

剑指offer第四十三题左旋转字符串

热度:16   发布时间:2024-02-07 09:58:18.0

题目描述

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

方法:有两种方法可以将char转换为String:

char a='4'
String b=a+"";//第一种
String c=String.valueOf(a);//第二种

本题使用队列Queue的方法解决

package test;
/*1、这一题使用队列就可以解决,从头部移出一个放到一个变量中,然后再将变量中的值再次放入到队列中。队列满足先进先出2、使用StringBuffer进行字符串操作
*/
import java.util.*;
class Solution {public String LeftRotateString(String str,int n) {if(str.length() == 0){return "";}Queue<String> queue = new LinkedList<>();char[] s = str.toCharArray();for(int i=0;i<s.length;i++){queue.add(s[i]+"");}//开始移位for(int j=0;j<n;j++){String tmp = queue.remove();//返回第一个移除的值,和stack.pop类似,如果为空,则跑出异常queue.add(tmp);}System.out.println(queue.size());System.out.println(s.length);//将字符数组再次变成字符串StringBuffer tem = new StringBuffer();for(int k=0;k<s.length;k++){//这里写queue.size()就不对,不知道为什么tem.append(queue.remove());//queue.remore()括号里面什么也不加}return tem.toString();//注意牛客网识别不出来这个方法}
}
public class Main{public static void main(String[] args) {String a = "abcXYZdef";Solution p = new Solution();String b =  p.LeftRotateString(a,3);System.out.println("结果:"+b);}
}

 

  相关解决方案