「这是我参与2022首次更文挑战的第17,活动详情查看:2022首次更文挑战」
2000. 反转单词前缀
给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。
例如,如果 word = "abcdefd" 且 ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 "dcbaefd" 。 返回 结果字符串 。
示例 1:
输入:word = "abcdefd", ch = "d"
输出:"dcbaefd"
解释:"d" 第一次出现在下标 3 。
反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "dcbaefd" 。
示例 2:
输入:word = "xyxzxe", ch = "z"
输出:"zxyxxe"
解释:"z" 第一次也是唯一一次出现是在下标 3 。
反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "zxyxxe" 。
示例 3:
输入:word = "abcd", ch = "z"
输出:"abcd"
解释:"z" 不存在于 word 中。
无需执行反转操作,结果字符串是 "abcd" 。
提示:
1 <= word.length <= 250
word 由小写英文字母组成
ch 是一个小写英文字母
分析
从提示 1 <= word.length <= 250
我们可以看出字符串 word
的长度不长可见此题对性能要求不高,所以这也是此题位简单题的根本。也就是我们可以通过最暴力的方式来解决此题。
根据题意我们需要根据传来的ch
来找到单词前缀。
那么如何找到单词前缀呢?
我们可以通过 indexOf
方法,来找到单词前缀的范围了。当然从示例 3中我可以发现如果不存在的话就直接返回原字符串。
那么剩下的就是把范围内的字符以此替换位置即可反转成功。
逐步实现
首先我们先日期前缀的范围,根据之前的分析我们可以用 indexOf
方法来确认。
const index = word.indexOf(ch);
if (index > -1) {
}
return word;
我们把word转换成数组 arr
来方便我们进行循环遍历。
const arr = word.split("");
我们定义俩个变量,这里变量分别为 left
初始化值为0、 right
初始化值为index
。然后进行循环。循环过程中我们对 arr[left]
与 arr[right]
的值进行互换。执行完毕时left++
、right--
。当right
不大于left
时结束循环。
let left = 0
let right = index;
while (left < right) {
[arr[left],arr[right]] = [arr[right],arr[left]]
left++;
right--;
}
最后当遍历完毕时我们把 arr
转换成为字符串并赋值给 word
,并返回 word
。
word = arr.join('');
完整代码
/**
* @param {string} word
* @param {character} ch
* @return {string}
*/
var reversePrefix = function(word, ch) {
const index = word.indexOf(ch);
if (index > -1) {
const arr = word.split("");
let left = 0
let right = index;
while (left < right) {
[arr[left],arr[right]] = [arr[right],arr[left]]
left++;
right--;
}
word = arr.join('');
}
return word;
};