剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)
//题目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左旋转字符串)的更多相关文章
- 剑指offer-第六章面试中的各项能力(二叉树的深度)
题目:1:输入一个二叉树,求二叉树的深度.从根节点开始最长的路径. 思路:我们可以考虑用递归,求最长的路径实际上就是求根节点的左右子树中较长的一个然后再加上1. 题目2:输入一颗二叉树的根节点,判断该 ...
- 剑指offer-第六章面试中的各项能力(圆圈中剩下的最后数字)
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util ...
- 剑指offer-第六章面试中的各项能力(扑克牌中的顺子)
//扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是 ...
- 剑指offer-第六章面试中的各项能力(n个骰子的点数)
题目:把n个骰子扔到地上,骰子之和为S,输入n,打印s所有可能的值出现的概率. 思路:由于骰子的点数为1~6,因此n个骰子之和的大小为n~6n之间.故可以定义一个数组来存放这6n-n+1个数出现的次数 ...
- 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)
题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数. 思路:分别用两个指针指向数组的头start和尾end.如果两个数字之和等于S输出.如果打于,则end--,再次相加.因此循环 ...
- 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)
题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...
- 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)
题目:统计一个数字在排序数组中出现的次数. 思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置.两者做减法运算再加1.时间复杂度为O(logn) Java代码: // ...
- 剑指offer-第六章面试中的各项能力之总结
- 剑指offer-第六章面试中的各项能力(不用加减乘除做加法)
//不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步 ...
随机推荐
- Web安全学习笔记之HTTP协议
HTTP是一个应用层协议,主要用于Web开发,通常由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接.HTTP服务器则在那个端口监听客户端的请求.一旦收到请求,服务器 ...
- P4949 最短距离(基环树+树链剖分)
题目 P4949 最短距离 做法 先把非树边提出来 查询\((x,y)\)的最短距离就分类查询:树上\((x,y)\)距离,经过非树边距离 带边权查询链长,一个烂大街的套路:树链剖分,节点维护树边距离 ...
- Microsoft.VisualStudio.Web.PageInspector.Loader
未能加载文件或程序集"Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, P ...
- java-json与js-json转化
js中将字符串转换成json的三种方式http://www.jb51.net/article/25987.htm JAVA对象转换为JSON字符串 http://blog.163.com/zzf_fl ...
- Spring Boot 中配置切换
步骤一:切换需求 有时候在本地测试是使用8080端口(默认端口),可是上线时使用的比如是9090端口(不常用的,以防被黑). 此时就可以通过多配置文件实现多配置支持与灵活切换. 步骤二:多配置文件 3 ...
- Aware接口
Aware接口: 例如: BeanNameAware接口是为了让自身Bean能够感知到,获取到自身在Spring容器中的id属性. 同理,其他的Aware接口也是为了能够感知到自身的一些属性. 比如实 ...
- 如何查看eclipse、mysql的版本 - 原创
Eclipse 1)如果实在官网下载的,看压缩包名字就可以看出来,只带有win32字样的是32位,带有win32-x86_64字样的是64位的. 2)找到eclipse安装目录的eclipse.ini ...
- 配置可对外链接的Redis
链接服务器的Redis telnet 192.168.1.200 6379 Trying 192.168.1.200... telnet: Unable to connect to remote ho ...
- LeetCode第[34]题(Java):Search for a Range
题目:搜索目标范围 难度:Medium 题目内容: Given an array of integers nums sorted in ascending order, find the starti ...
- Django进阶Model篇002 - 模型类的定义
一.创建数据模型. 实例: 作者模型:一个作者有姓名. 作者详情模型:把作者的详情放到详情表,包含性别.email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField ...