//题目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. h5新特性--- 多媒体元素

    在H5中只有一行代码即可实现在页面中插入视频 <video src="插入的视频的名字" controls></video> 可以指明视频的宽度和高度 &l ...

  2. jQuery多层级垂直手风琴菜单

    在线演示 本地下载

  3. Collection与Collections、ArrayList和Vector、HashMap和Hashtable(面试常用)

    Collections与Collection 1. Collections是java.util下的类,它包含有各种有关集合操作的静态方法2. Collection是java.util下的接口,它是各种 ...

  4. Scala:scala的一些简单操作命令

    Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. 不太久之前编程语言还可以毫无疑意地归类成“命令式”或者“函数式”或 ...

  5. Oracle loop、while、for循环

    Loop循环 Declare p_sum ; p_i number; Begin p_i :; Loop p_sum := p_sum + p_i; p_i :; ) then SYS.Dbms_Ou ...

  6. MySQLdump增量备份、完全备份与恢复

    在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.场景:每周日执行一次完全备份,每天下午1点执行MySQLdum ...

  7. python django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct[转]

    1.多表连接查询:当我知道这点的时候顿时觉得django太NX了.   class A(models.Model):     name = models.CharField(u'名称')   clas ...

  8. Google maps api demo

    demo: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...

  9. Pandas可视化

    基本绘图:绘图 Series和DataFrame上的这个功能只是使用matplotlib库的plot()方法的简单包装实现.参考以下示例代码 - import pandas as pd import ...

  10. Pandas注意事项&窍门

    警告和疑难意味着一个看不见的问题.在使用Pandas过程中,需要特别注意的地方. 与Pandas一起使用If/Truth语句 当尝试将某些东西转换成布尔值时,Pandas遵循了一个错误的惯例. 这种情 ...