a**d 发帖数: 85 | 1 { "face", "ball", "apple", "art", "ah" }
"htarfbp..."
根据下面的string去给上面list words排序。
就是平常我们按abcd。。。排,这次按string里的letter顺序排
求bless |
s*********p 发帖数: 130 | 2 没明白题目意思
{ "face", "ball", "apple", "art", "ah" }"htarfbp..."根据下面的string去给上面
list words排序。就是平常我们按a........
【在 a**d 的大作中提到】 : { "face", "ball", "apple", "art", "ah" } : "htarfbp..." : 根据下面的string去给上面list words排序。 : 就是平常我们按abcd。。。排,这次按string里的letter顺序排 : 求bless
|
s*i 发帖数: 5025 | 3 1. build an index map: h=0; t=1; a=2; ....
2. sort
【在 a**d 的大作中提到】 : { "face", "ball", "apple", "art", "ah" } : "htarfbp..." : 根据下面的string去给上面list words排序。 : 就是平常我们按abcd。。。排,这次按string里的letter顺序排 : 求bless
|
h*********o 发帖数: 230 | 4 NICE~
【在 s*i 的大作中提到】 : 1. build an index map: h=0; t=1; a=2; .... : 2. sort
|
r****7 发帖数: 2282 | 5 显然一个size是26得数组就OK了啊
而且要实现一个字符串比较函数,用整数的话会overflow
【在 s*i 的大作中提到】 : 1. build an index map: h=0; t=1; a=2; .... : 2. sort
|
l*****a 发帖数: 14598 | 6
ZKSS, 给定字符串很短的话也用数组?
另外用数组怎么保存顺序呢。
ZKSS上面怎么说用整数了?
【在 r****7 的大作中提到】 : 显然一个size是26得数组就OK了啊 : 而且要实现一个字符串比较函数,用整数的话会overflow
|
f*********0 发帖数: 17 | 7 map mymap;
bool compare(string A, string B) {
for (int i = 0; i < A.size(); ++i) {
A[i] = mymap[A[i]];
}
for (int i = 0; i < B.size(); ++i) {
B[i] = mymap[B[i]];
}
int n = min(A.size(), B.size());
for (int i = 0; i < n; ++i) {
if (A[i] != B[i]) return A[i] < B[i];
}
if (B.size()==n) return false;
else return true;
}
void sortString(vector words, string order) {
for (int i = 0; i < order.size(); ++i) {
mymap[order[i]] = i+'a';
}
sort(words.begin(), words.end(), compare);
} |
r****7 发帖数: 2282 | 8 zkss是什么意思啊。。。
我的意思是是不用map这种数据结构,比如给的新order是bca,那就arr[0] = 2, arr[1
] = 0, arr[2] = 1
说sort要实现一个compare吧,不然不是默认整数么
anyway,这个题没啥难度,对比你以前的发帖,肯定明白我的意思啊...
【在 l*****a 的大作中提到】 : : ZKSS, 给定字符串很短的话也用数组? : 另外用数组怎么保存顺序呢。 : ZKSS上面怎么说用整数了?
|
n*******e 发帖数: 37 | 9 compare() 是不是也能这样做?
bool compare(string &A, string &B) {
for (int i = 0; i < A.size() && i < B.size(); i++) {
// if equal, continue to the next char;
// if not equal, return true if A[i] is smaller
if (A[i] != B[i])
return (mymap[A[i]] < mymap[B[i]]);
}
// if reach the end of A, A is then smaller
return (i == A.size()) ? true : false;
}
【在 f*********0 的大作中提到】 : map mymap; : bool compare(string A, string B) { : for (int i = 0; i < A.size(); ++i) { : A[i] = mymap[A[i]]; : } : for (int i = 0; i < B.size(); ++i) { : B[i] = mymap[B[i]]; : } : int n = min(A.size(), B.size()); : for (int i = 0; i < n; ++i) {
|
w*****t 发帖数: 485 | 10 可以,不过有个小bug,in "return (i == A.size())", i out of its scope.
另外也可以用class来实现,类似std::greater..
compare() 是不是也能这样做?
【在 n*******e 的大作中提到】 : compare() 是不是也能这样做? : bool compare(string &A, string &B) { : for (int i = 0; i < A.size() && i < B.size(); i++) { : // if equal, continue to the next char; : // if not equal, return true if A[i] is smaller : if (A[i] != B[i]) : return (mymap[A[i]] < mymap[B[i]]); : } : : // if reach the end of A, A is then smaller
|
n*******e 发帖数: 37 | 11 got it~ thanks!
【在 w*****t 的大作中提到】 : 可以,不过有个小bug,in "return (i == A.size())", i out of its scope. : 另外也可以用class来实现,类似std::greater.. : : compare() 是不是也能这样做?
|
b******g 发帖数: 3616 | 12 赞这个“狸猫换太子”法lol~
【在 f*********0 的大作中提到】 : map mymap; : bool compare(string A, string B) { : for (int i = 0; i < A.size(); ++i) { : A[i] = mymap[A[i]]; : } : for (int i = 0; i < B.size(); ++i) { : B[i] = mymap[B[i]]; : } : int n = min(A.size(), B.size()); : for (int i = 0; i < n; ++i) {
|
a**d 发帖数: 85 | |