1.字符串左旋 如abcdefg——》cdefab
//左旋 abcdefg——》cdefab package demo; import java.util.Arrays; import java.util.Scanner; public class Demo1024 { public static char[] leftTurn(char[] array,int a){//左旋a个字符 char tmp = 0; for(int i = 0;i < a / 2;i ++){//前a个元素逆序 tmp = array[i]; array[i] = array[a - 1 - i]; array[a - 1 - i] = tmp; } for(int j = a;j < (array.length + a) / 2;j ++){//剩下的元素逆序 tmp = array[j]; array[j] = array[array.length - 1 + a - j]; array[array.length - 1 + a - j] = tmp; } for(int k = 0;k < array.length / 2;k ++){//将整个数组逆序 tmp = array[k]; array[k] = array[array.length - 1 - k]; array[array.length - 1 - k] = tmp; } return array; } public static char[] toArray(String str){//字符串转化为字符数组 char[] arr = new char[str.length()];//新建一个长度为该字符串长度的字符型数组 str.getChars(0,str.length(),arr,0);//将字符串复制到数组内 //System.out.println(arr); return arr; } public static void main(String[] args) { System.out.println("请输入一个字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); // char[] arr1 = toArray(str); // System.out.println(arr1); // System.out.println(Arrays.toString(arr1)); char[] arr = leftTurn(toArray(str),3); // System.out.println(Arrays.toString(arr)); System.out.println(arr); } } package demo; import java.util.Scanner; public class Demo1026 { //将一个字符串的某部分逆序 public static String reverse(String str,int begin,int end){ char[] ch = str.toCharArray();//字符串转换成数组 char tmp = 0;//中间变量 while(begin < end){//开始和结束部分没有相遇,进入循环 //交换 tmp = ch[begin]; ch[begin] = ch[end]; ch[end] = tmp; begin ++;//开始位置为下一个下标 end --;//结束位置为前一个下标 } return String.copyValueOf(ch);//返回字符串 } public static void leftRoadString(String str,int n){//左旋 if(str ==null || n < 0 || n > str.length()){ return; } int left = 0; int leftend = n - 1; int right = n; int rightend = str.length() - 1; str = reverse(str,left,leftend); str = reverse(str,right,rightend); str = reverse(str,left,rightend); System.out.println(str); } public static void main(String[] args) { System.out.println("输入一个字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); System.out.println(str); leftRoadString(str,2); } }2.一句话中的单词逆置,"Here is Tulun" ===> "Tulun is Here"
package demo; import java.util.Scanner; public class ReversrSentence { public static void reverse(char[] ch,int begin,int end){ char tmp = 0; while(begin < end){ tmp = ch[begin]; ch[begin] = ch[end]; ch[end] = tmp; begin ++; end --; } } public static String reverseSentence(String str){ if(str == null){ return null; } char[] ch = str.toCharArray(); reverse(ch,0,ch.length - 1);//整体逆置 int i = 0;//单词开始 int j = 0;//单词结束 while(i < ch.length){ if(ch[j] == ' ' || j == str.length()){//j是空格,i~j的部分逆置 reverse(ch,i,--j); i = ++j; }else if(ch[i] == ' '){//i是空格,i向后走作为下一个单词的开始 i ++; j ++; }else{//都不是空格,j向后走,寻找单词的结束 j ++; } } return String.copyValueOf(ch); } public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.nextLine(); System.out.println(reverseSentence(str)); } }
