剑指Offer:翻转单词顺序 vs 左旋转字符串
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内部的顺序不变。为简单起见 ,标点符号和普通字母一样处理。例如输入字符串”I am a student. ”,则输出”student. a am I”。
这是一道经典的算法题,使用两次翻转即可实现。我们能很顺畅的给面试官解释:第一次对整个字符串进行翻转,得到:“.stneduts a ma I”;第二次对单个字符串进行翻转,得到:“students. a am I”。
实现代码:
private static String ReverseSentence(String sentence){if(sentence==null||sentence.length()==0){throw new RuntimeException("sentence==null||sentence.length()==0");}char[] chs = sentence.toCharArray();//第一次字符串整体逆序Reverse(chs, 0, chs.length-1);//第二次对字符串中单个单词进行逆序,单词直接分界就是空格int wordStart=0,wordEnd=0;char temp=chs[wordEnd];while(wordEnd<chs.length){if(chs[wordEnd]==' '){Reverse(chs, wordStart, wordEnd-1);wordEnd++;wordStart = wordEnd;}wordEnd++;}return new String(chs);
}private static void Reverse(char[] chs,int left,int right){while(left<right){char temp=chs[left];chs[left]=chs[right];chs[right]=temp;left++;right--;}
}
题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串”abcdefg"和数字 2,该函数将返回左旋转 2 位得到的结果”cdefgab”。
题目二与题目一的关联是比较大的,完成这题我们需要进行三步翻转。以字符串“abcdefg”为例,第一次翻转前2位,即“ab”,得到”bacdefg”;第二次翻转后面的所有字符,得到“bagfedc”;第三次翻转整个字符串,得到“cdefgab”。
实现代码:
private static String LeftRotateString(String str,int n){if(str==null||str.length()==0||n<0){throw new RuntimeException("str==null||str()==0");}char[] chs = str.toCharArray();Reverse(chs, 0, n-1);Reverse(chs,n,chs.length-1);Reverse(chs,0,chs.length-1);return new String(chs);}
剑指Offer:翻转单词顺序 vs 左旋转字符串相关推荐
- [剑指offer]面试题42:翻转单词顺序 VS左旋转字符串
面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...
- 剑指offer——面试题42-1:左旋转字符串
剑指offer--面试题42-1:左旋转字符串 20180906整理 Solution1: 自己最开始想出来的垃圾算法!!! class Solution {public:string LeftRot ...
- 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...
- 翻转单词顺序与左旋转字符串
题目一:输入一个英文句子,翻转句子中单词的顺序.但是单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student.",则输出" ...
- 翻转单词顺序和左旋转字符串
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串"I am a student.",则输出"stu ...
- 剑指Offer - 面试题58 - II. 左旋转字符串
1. 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转 ...
- 剑指offer 面试题58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结 ...
- 剑指offer面试题58 - II. 左旋转字符串(切片)(一行代码)
题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两 ...
- 剑指Offer - 翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"st ...
最新文章
- Laravel Redis操作大全
- redis报错Windows error 0x70--记录一次服务器雪崩异常
- 计算机一级必考知识点,计算机一级word操作知识点
- mysql5_pn卸载_windows mySql(5.7.30) 卸载及重装
- log4j.properties
- 【通信原理课程设计】8PSK调制解调技术的设计与仿真(MATLAB)
- 3级软件测试试题,软件测试人员(.NET)_3级_操作技能鉴定1.1.3试题单(26页)-原创力文档...
- 微星主板rgb_虽然这块主板价格有点小贵,但用过之后,感觉还是可以接受的
- 2020年平均工资出炉!这个行业最高
- Linux驱动实现灯循环闪烁,TQ2440上LED灯闪烁效果的驱动程序实现
- 壁纸控、视觉控少不了高图网解决图片需求问题
- 解决applet覆盖遮罩层div的问题
- c语言邻接表存储拓扑排序,拓扑排序(完整案列及C语言完整代码实现)
- Chipmunk2D中文手册
- 云教室管理平台 部署手册(无图)
- 笔记本电脑刚回来没有计算机,刚买笔记本电脑我的笔记本电脑没有光驱,如果重新安装系统,怎么样操 爱问知识人...
- unity--常用物理公式
- next项目部署到服务器pm2进程守护
- 公安部中标十大身份证阅读器品牌型号
- 【转】perl中$#ARGV是什么意思