给你一个字符串s和一个长度相同的整数数组indices。
请你重新排列字符串s,其中第i个字符需要移动到indices[i]指示的位置。
返回重新排列后的字符串。
长度范围为[1,100]闭区间。s仅包含小写字母。
输入: s = “codeleet”, indices = [4,5,6,7,0,2,1,3]
输出:“leetcode”
解释:索引对应即可。
直接模拟即可
class Solution {
public String restoreString(String s,int[] indices) {
char[] ch = s.toCharArray();
int len = ch.length;
for (int i = 0; i < len; i++) {
ch[inidices[i]] = s.charAt(i);
}
return String.valueOf(ch);
}
}
房间中有n个灯泡,编号从0到n-1,自左向右排成一行。最开始的时候,所有灯泡都是关闭的。
请你设法使灯泡的开关状态和target描述的一致。
target = [0,1,0]表示灭,亮,灭。
有一个操作可以用于翻转灯泡的状态,翻转操作如下:
翻转会让灭的变亮,亮的熄灭。
返回达成target描述的状态需要的最少翻转次数。
输入: target = “10111”
输出:3
解释:初始配置“00000” -> “00111”-> “11000”-> “10111”,共需要3步
仔细看题目发现实际上就是求翻转的次数,10111等价于三个部分,101,后续的三个1可以等价为1个1,这样一来我们从最后面开始找这样的一个部分,比如10111,先找到111,变为000,则整个字符串变为10000,此时再把后面的0000变为一块,变为1111,那么整个字符串变为11111,直接再反转一次即可得到起始的00000。如此即可实现。
class Solution {
public int minFlips(String target) {
char[] ch = target.toCharArray();
int len = ch.length;
int res = ch[0] + '0';
for (int i = 0; i < len - 1; i++) {
if (ch[i + 1] != ch[i] ) {
res++;
}
}
return res;
}
}