佛山seo网站排名,廊坊seo排名优化,全国做网站最好的公司,wordpress动态二维码1. 题目
你有一个日志数组 logs。每条日志都是以空格分隔的字串。
对于每条日志#xff0c;其第一个字为字母数字标识符。然后#xff0c;要么#xff1a;
标识符后面的每个字将仅由小写字母组成#xff0c;或#xff1b;标识符后面的每个字将仅由数字组成。
我们将这…1. 题目
你有一个日志数组 logs。每条日志都是以空格分隔的字串。
对于每条日志其第一个字为字母数字标识符。然后要么
标识符后面的每个字将仅由小写字母组成或标识符后面的每个字将仅由数字组成。
我们将这两种日志分别称为字母日志和数字日志。保证每个日志在其标识符后面至少有一个字。
将日志重新排序使得所有字母日志都排在数字日志之前。字母日志按内容字母顺序排序忽略标识符在内容相同时按标识符排序。数字日志应该按原来的顺序排列。
返回日志的最终顺序。
示例
输入[a1 9 2 3 1,g1 act car,zo4 4 7,ab1 off key dog,a8 act zoo]
输出[g1 act car,a8 act zoo,ab1 off key dog,a1 9 2 3 1,zo4 4 7]提示
0 logs.length 100
3 logs[i].length 100
logs[i] 保证有一个标识符并且标识符后面有一个字。来源力扣LeetCode 链接https://leetcode-cn.com/problems/reorder-data-in-log-files 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 自定义排序
注意用稳定排序自定义函数写法
string getStr(const string s, string pre)
{int i 0;while(s[i] ! ){pre s[i];i;}return s.substr(i1);
}bool cmp(string a, string b)
{string preA, preB;string sa getStr(a,preA), sb getStr(b,preB);if((isdigit(sa[0]) isdigit(sb[0])))return false;else if((isdigit(sa[0]) !isdigit(sb[0])))return false;else if((!isdigit(sa[0]) isdigit(sb[0])))return true;else{if(sa ! sb)return sa sb;elsereturn preA preB;}
}class Solution {
public:vectorstring reorderLogFiles(vectorstring logs) {stable_sort(logs.begin(), logs.end(), cmp);return logs;}
};比较函数写在类内需要加上static
class Solution {
public:vectorstring reorderLogFiles(vectorstring logs) {stable_sort(logs.begin(), logs.end(), cmp);return logs;}static string getStr(const string s, string pre){int i 0;while(s[i] ! ){pre s[i];i;}return s.substr(i1);}static bool cmp(string a, string b){string preA, preB;string sa getStr(a,preA), sb getStr(b,preB);if((isdigit(sa[0]) isdigit(sb[0])))return false;else if((isdigit(sa[0]) !isdigit(sb[0])))return false;else if((!isdigit(sa[0]) isdigit(sb[0])))return true;else{if(sa ! sb)return sa sb;elsereturn preA preB;}
}
};我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步