标签:单词 char java 557 力扣 start 数组 字符串 array
题目:
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
- 1 <= s.length <= 5 * 104
- s 包含可打印的 ASCII 字符。
- s 不包含任何开头或结尾空格。
- s 里 至少 有一个词。
- s 中的所有单词都用一个空格隔开。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.先将字符串转换成字符数组,然后遍历字符数组;
2.当遇到空格字符,则说明前一个单词结束了,需要对空格前的单词进行翻转操作,定义一个初始索引start,结束索引为 i-1(因为此时i所指向的为空格,需要减1才是字母)
3.利用字符数组reverse()函数进行翻转操作,翻转结束后,把初始索引start更新为 i+1 下一个单词的首字母位置,然后继续遍历,直到遇到下一个空格或结尾;
4.遍历到字符数组结尾(i == n-1),最后一个单词的结束索引为 n-1,然后利用函数进行翻转;
5.最后用String的构造方法,将char数组转换成字符串进行返回。
代码:
1 class Solution { 2 public String reverseWords(String s) { 3 //把字符串转换为字符串数组 4 char[] array = s.toCharArray(); 5 //获取字符串数组的长度 6 int n = array.length; 7 //定义一个头指针 8 int start = 0; 9 for(int i= 0;i < n;i++){ 10 //遍历字符串数组,遇到空格符代表一个单词遍历结束 11 if(array[i] == ' '){ 12 reverse(array, start, i-1); 13 //首指针为下一个单词首位置 14 start = i+1; 15 } 16 //遍历到最后一个单词 17 if(i == n-1){ 18 reverse(array, start, i); 19 } 20 } 21 return new String(array); 22 } 23 public void reverse(char[] array, int i, int j){ 24 while(i < j){ 25 char temp = array[j]; 26 array[j] = array[i]; 27 array[i] = temp; 28 i++; 29 j--; 30 } 31 } 32 }
小知识:
1.toCharArray() 方法将字符串转换为字符数组
// 将字符串s转化成一个char类型的数组,数组名为s1 char[] s1 = s.toCharArray();
2.将s1转化成string字符串: return new String(s1);
标签:单词,char,java,557,力扣,start,数组,字符串,array 来源: https://www.cnblogs.com/lmy569/p/16241807.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。