描述
给一包含大写字母和整数(从 0 到 9)的字符串, 试写一函数返回有序的字母以及数字和.
样例
- 样例 1:
输入 : str = "AC2BEW3"
输出 : "ABCEW5"
说明 :
字母按字母表的顺序排列, 接着是整数的和(2 和 3)。
解析
首先看了一下Java和Python的提交
Java的提交:
public class Solution {
/**
* @param str: a string containing uppercase alphabets and integer digits
* @return: the alphabets in the order followed by the sum of digits
*/
public String rearrange(String str) {
// Write your code here
char[] cs = str.toCharArray();
Arrays.sort(cs);
int res = 0;
int index = -1;
for(int i = 0; i < cs.length; i++){
if(cs[i] >= '0' && cs[i] <= '9'){
res += (cs[i] - '0');
index++;
}else{
break;
}
}
if(index == -1){
return new String(cs);
}else{
StringBuilder sb = new StringBuilder();
for(int i = index+1; i < cs.length; i++){
sb.append(cs[i]);
}
sb.append(res);
return sb.toString();
}
}
}
Python的提交
class Solution:
"""
@param str: a string containing uppercase alphabets and integer digits
@return: the alphabets in the order followed by the sum of digits
"""
def rearrange(self, str):
# Write your code here
Str = list(str)
Str.sort()
res = 0
index = -1
for i in range(0, len(Str)):
if Str[i] >= '0' and Str[i] <= '9':
res += int(Str[i])
index += 1
else:
break
if index == -1:
return ''.join(Str)
else:
return ''.join(Str[index + 1 : len(Str)]) + repr(res)
个人感觉代码都有点多,于是自己整理了下思路。
首先sort排序数字是在字母前面的,也就是说所有的字母都会比数字大,但是排序后出现一个问题:数字也是字符串类型,于是放弃了直接sort排序(其实也可以用,这里没继续顺这个思路思考)
创建num来保存数字,创建char保存字母,因为字母转数字是NaN,所以for循环,利用Number对所有项转化,isNaN判断,字母的push到char中,数字的push到num中。
最后char用sort进行排序处理,再用join变成字符串,num数组用map方法把各项变成数字类型,再用reduce方法快速求和(不懂自行百度reduce方法哈,毕竟我也是百度的),合并字符串再return结果。
提交的时候11%出,输入为空会报错,所以在最开始进行空值的return操作。
rearrange = str => {
if(str === "") return ""
var num = [], char = [], arr = str.split('')
for(i=0;i
if(isNaN(Number(arr[i]))) char.push(arr[i])
else num.push(arr[i])
}
return char.sort().join('') + num.map(Number).reduce((sum, n) => sum + n)
}
运行结果
原文链接:https://blog.csdn.net/SmallTeddy/article/details/108252891