//题目1:翻转单词顺序例如“Hello world!”翻转后为world! Hello。
//思路:首先翻转整个字符串,然后再分别翻转每个单词。
//题目2:左旋转字符串,是将字符串的前面几个(n)字符放到整个字符串的后面。例如:“helloWorld”,旋转后lloWorldhe
//思路:将字符串分成两半分别翻转,然后整个翻转。
public class ReverseWord {
//翻转一个字符串
public void reverseWord(char[] a,int start,int end){
if(a==null)
return;
while(start<end){
swrap(a,start,end);
start++;
end--;
}
} public void swrap(char[] a, int start, int end) {
char temp=a[start];
a[start]=a[end];
a[end]=temp; }
//翻转单词的顺序
public void ReverseWordSequence(char[] a){
if(a==null)
return;
reverseWord(a,0,a.length-1);
int start=0;
int end=0;
while(start<a.length ){
if(a[start]==' '){
start++;
end++;
}
else if(a[end]==' '){
reverseWord(a,start,--end);
start=++end;
}
else if(end==a.length-1){
reverseWord(a,start,end);//最后一个单词
break;
}
else
end++;
}
}
//左旋转字符串
public void LeftReverseString(char[] a,int n){
if(a==null)
return;
if(n<a.length&&n>0){
int startFirst=0;
int endFirst=n-1;
int startSecond=n;
int endSecond=a.length-1;
reverseWord(a,startFirst,endFirst);
reverseWord(a,startSecond,endSecond);
reverseWord(a,0,a.length-1);
} }
public static void main(String[] args){
String s="hello world i am love!";
char[] a=s.toCharArray();
ReverseWord rw=new ReverseWord();
rw.LeftReverseString(a, a.length);
for(char c:a)
System.out.print(c+" ");
System.out.println();
rw.ReverseWordSequence(a);
for(char c:a)
System.out.print(c+" ");
System.out.println(); }
}

剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)的更多相关文章

  1. 剑指offer-第六章面试中的各项能力(二叉树的深度)

    题目:1:输入一个二叉树,求二叉树的深度.从根节点开始最长的路径. 思路:我们可以考虑用递归,求最长的路径实际上就是求根节点的左右子树中较长的一个然后再加上1. 题目2:输入一颗二叉树的根节点,判断该 ...

  2. 剑指offer-第六章面试中的各项能力(圆圈中剩下的最后数字)

    import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util ...

  3. 剑指offer-第六章面试中的各项能力(扑克牌中的顺子)

    //扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是 ...

  4. 剑指offer-第六章面试中的各项能力(n个骰子的点数)

    题目:把n个骰子扔到地上,骰子之和为S,输入n,打印s所有可能的值出现的概率. 思路:由于骰子的点数为1~6,因此n个骰子之和的大小为n~6n之间.故可以定义一个数组来存放这6n-n+1个数出现的次数 ...

  5. 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)

    题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数. 思路:分别用两个指针指向数组的头start和尾end.如果两个数字之和等于S输出.如果打于,则end--,再次相加.因此循环 ...

  6. 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)

    题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...

  7. 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)

    题目:统计一个数字在排序数组中出现的次数. 思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置.两者做减法运算再加1.时间复杂度为O(logn) Java代码: // ...

  8. 剑指offer-第六章面试中的各项能力之总结

  9. 剑指offer-第六章面试中的各项能力(不用加减乘除做加法)

    //不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步 ...

随机推荐

  1. 双camera景深计算 (1)

    http://www.52rd.com/S_TXT/2016_6/TXT85047.HTM?WebShieldDRSessionVerify=Wz3h6srvu76qRI4MFxK8 前面介绍了双ca ...

  2. 基于Promise对象的新一代Ajax API--fetch

    ***************************************************************** #fetch Request 使用isomorphic-fetch发 ...

  3. 如何编写自己的虚拟DOM

    要构建自己的虚拟DOM,需要知道两件事.你甚至不需要深入 React 的源代码或者深入任何其他虚拟DOM实现的源代码,因为它们是如此庞大和复杂--但实际上,虚拟DOM的主要部分只需不到50行代码. 有 ...

  4. mysql配置文件生效顺序

    安装完数据库 除了将my.cnf放在/etc/下放在其他地方也是可以的 cp /usr/share/mysql/my-default.cnf /etc/my.cnf 今天就看一下这些my.cnf是怎么 ...

  5. C++ string 用法总结

    string查找替换.分割字符串.比较.截取.类型转换.排序等功能都提供了强大的处理函数,可以代替字符数组来使用. 熟练掌握好string的各种使用方法,能极大的提高编程效率哦 ^_^. #inclu ...

  6. 混合开发的大趋势之 一个Android程序员眼中的 React.js 块级作用域 和 let

    转载请注明出处:王亟亟的大牛之路 最近都有事干然后,快到月底了这个月给CSDN的博文也就两篇,想想也蛮多天没更了,那就来一篇. 老规矩,先安利:https://github.com/ddwhan012 ...

  7. Aggregate Services

    https://stackoverflow.com/questions/7199097/constructor-injection-into-a-base-class-using-autofac Ca ...

  8. nginx官网下载&百度云分享

    官网下载的链接: nginx官网下载地址:http://nginx.org/download/ 百度云分享 链接:https://pan.baidu.com/s/16m6zrFSkYCJtX0rD2Y ...

  9. secureCRT7.3.4的破解与安装

    1-9为 SecureCRT 7.3.4 安装图解:10-13是 SecureCRT 7.3.4 破解图解,心急的朋友可以直接向下拉. 以下是百度百科对 SecureCRT 的介绍: SecureCR ...

  10. 文件IO大纲

    文件流与文件描述符的区别 a) 任何进程在运行时都默认打开3个流对象,(stdin, stdout, stderr)它们都有对应的文件描述符,其文件描述符分别为0,1,2,以后打开的文件描述符的值一般 ...