左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解题思路
1.借助ArrayList添加字符数组
2.借助StringBuffer
代码
import java.util.ArrayList;
/**
* 剑指offer一刷:左旋转字符串
*
* @author User
* @create 2019-05-31-19:09
*/
public class jzo43 {
public String LeftRotateString(String str,int n) {
if (str==null||str.length()<0){
return "";
}
char[] ch=str.toCharArray();
ArrayList<Character> list=new ArrayList<>();
for (int i=n;i<ch.length;i++){
list.add(ch[i]);
}
for (int i=0;i<n;i++){
list.add(ch[i]);
}
for (int i=0;i<list.size();i++){
ch[i]=list.get(i);
}
String newStr=new String(ch);
// String newStr=ch.toString();
return newStr;
}
public String LeftRotateString1(String str,int n) {
if (str.length()==0){
return str;
}
StringBuffer buffer=new StringBuffer(str);
StringBuffer buffer1=new StringBuffer(str);
StringBuffer buffer2=new StringBuffer();
buffer.delete(0,n);
buffer1.delete(n,str.length());
buffer2.append(buffer.toString()).append(buffer1.toString());
return buffer2.toString();
}
public static void main(String[] args){
String str="abcXYZdef";
int n=3;
jzo43 so=new jzo43();
System.out.println(so.LeftRotateString(str,n));
System.out.println(so.LeftRotateString1(str,n));
}
}
翻转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
解题思路
思路很简单,根据“ ”拆分字符串,再重组,学习一下String的trim()方法源码,第一次使用(对于我)
public String trim() {
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
代码
/**
* 剑指offer一刷:翻转单词顺序列
*
* @author User
* @create 2019-05-31-20:00
*/
public class jzo44 {
public String ReverseSentence(String str) {
if (str.length()==0||str==null||str.length()==1){
return str;
}
if (str.trim().equals("")){
return str;
}
String[] str1=str.split(" ");
StringBuffer newStr=new StringBuffer();
for (int i=str1.length;i>0;i--){
newStr=newStr.append(str1[i-1]).append(" ");
}
newStr.delete(newStr.length()-1,newStr.length());
return newStr.toString();
}
public static void main(String[] args){
String str="student. a am I";
jzo44 so=new jzo44();
System.out.println(so.ReverseSentence(str));
}
}