A. 移动字母
题目描述
给定一个只包含小写字母的字符串s,牛牛想将这个字符串中的所有 ‘a’ 字母全部移动到字符串的末尾,而且保证其它字符的相对顺序不变。其中字符串s的长度 <= 1e6。
示例
输入
"abcavv"
输出
"bcvvaa"
解法一:遍历
思路分析
遍历字符串,所有非 ‘a’ 字符前移,剩余位置补 ‘a’ 即可。
时间复杂度:O(n)
空间复杂度:O(n)
代码实现
class Solution {
/**
*
* @param s string字符串
* @return string字符串
*/
public String change (String s) {
if(s == null) return s;
int n = s.length();
StringBuilder res = new StringBuilder();
for(int i = 0; i < n; i++){
if(s.charAt(i) != 'a') res.append(s.charAt(i)); //非 'a' 字符前移
}
while(res.length() < n) res.append('a'); // 末位补 'a'
return res.toString();
}
}
B. 魔法数字
题目描述
一天,牛妹找牛牛做一个游戏,牛妹给牛牛写了一个数字 n ,然后又给自己写了一个数字 m ,她希望牛牛能执行最少的操作将他的数字转化成自己的。
操作共有三种,如下:
1. 在当前数字的基础上加一,如:4 转化为 5
2. 在当前数字的基础上减一,如:4 转化为 3
3. 将当前数字变成它的平方,如:4 转化为 16
你能帮牛牛解决这个问题吗?
输入:
给定 n, m 分别表示牛牛和牛妹的数字。
输出:
返回最少需要的操作数。
备注