剑指offer39--翻转单词和左旋转字符串

来源:互联网 发布:汤姆汉克斯的地位知乎 编辑:程序博客网 时间:2024/05/16 07:01


一、题目


题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字啊的顺序不变。为简单起见,标点符号和普通字母一样处理。


二、举例



例如输入字符串”I am a student. ”,则输出”student. a am I”。



三、思想



我思想是,先将字符串使用的空格的分割方式来进行分割,然后分割后的元素放入String数组中,然后再返还或者打印都可以

第二种方式是使用start和end两个指针指向的元素相互调换的方式来翻转每个字符串



四、程序



package 剑指offer;/*题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字啊的顺序不变。为简单起见,标点符号和普通字母一样处理。*/public class Test43 {public static void main(String args[]){String str = "I love you so mush, do you hate me?";turnSentence(str);}public static void turnSentence(String str){// 边界条件if(str == null || str.length() < 0){throw new NullPointerException("怎么能这么输入呢");}// 将字符串按空格进行拆分,并存入数组中String ary[] = str.split(" ");// 将数组反向打印即可int num = ary.length - 1;for(int i = num; i >= 0; i--){System.out.println(ary[i]);}}}



一、题目



题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。


二、举例



比如输入字符串”abcdefg”和数字2,该函数将返回左旋转2 位得到的结”cdefgab”。



三、思想



通使用三次旋转的方式来实现所谓的字符串左旋转

(1)先将字符串分割成两部分

(2)分别将两部分进行旋转

(3)然后再对整体的数组进行旋转



四、程序



刚开始的思路是有点问题的,我是先拆分了,其实是不需要拆分的

package 剑指offer;/*题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。*/public class Test44 {// 将字符串进行翻转public static void reverse(char ary[], int start, int end){if(ary == null || ary.length < 1 || start < 0 || end > ary.length){throw new NullPointerException("怎么能这么输入呢");}while(start < end){char temp = ary[start];ary[start] = ary[end];ary[end] = temp;start++;end--;}}// 将数据进行左翻转public static char[] leftString(char ary[], int number){// 数组的总长度int all = ary.length;// 还是边界条件if(ary == null || ary.length < 1 || number < 1){throw new NullPointerException("怎么能这么输入呢");}// 想要把大象装冰箱,分几步,三步// 第一:将字数组分成两部分//char part1[] = new char[number];//char part2[] = new char[all - number];////for(int i = 0; i < number; i++){//part1[i] = ary[i];//}////int temp = 0;//for(int j = number; j < all; j++){////part2[temp] = ary[j];//temp++;////}// 第二:分别将两部分翻转reverse(ary, 0, number - 1);reverse(ary, number, all - 1);// 第四:将数组整体进行翻转,O了reverse(ary, 0, all - 1);return ary;}public static void main(String args[]){char ary[] = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g'};char data[] = leftString(ary, 2);for(int i = 0; i < data.length; i++){System.out.println(data[i]);}}}


1 0