Vì vậy, tôi đã thử tìm kiếm điều này trong tìm kiếm nhưng gần nhất tôi có thể đến là một câu trả lời tương tự trong một số ngôn ngữ khác nhau, tôi muốn sử dụng JavaScript để làm điều đó. Vấn đề là tôi có một chuỗi tùy ý mà tôi muốn trả về ký tự không lặp lại đầu tiên. Ví dụ: 'ABA' -> sẽ trả lại b 'aabcbd' -> sẽ trả lại c. Đây là những gì tôi có cho đến nay, chỉ là một vòng đơn giản để bắt đầu. var someString = 'aabcbd';
var firstNonRepeatedCharacter = function(string) {
for(var i = 0; i < someString.length; i++){
}
};
http://jsfiddle.net/w7f87/ không chắc chắn nơi để đi từ đây hỏi ngày 17 tháng 7 năm 2014 lúc 0:29Jul 17, 2014 at 0:29 TaylorallredtaylorallredTaylorAllred 1.1312 huy hiệu vàng9 Huy hiệu bạc20 Huy hiệu đồng2 gold badges9 silver badges20 bronze badges 13 Bạn có thể sử dụng phương thức var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
1 để tìm ký tự không lặp lại. Nếu bạn tìm kiếm ký tự trong chuỗi, nó sẽ là người đầu tiên được tìm thấy và bạn sẽ không tìm thấy người khác sau nó:function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
Bản demo: http://jsfiddle.net/guffa/se4dd/ Đã trả lời ngày 17 tháng 7 năm 2014 lúc 0:38Jul 17, 2014 at 0:38 5
Nếu bạn đang tìm kiếm lần xuất hiện đầu tiên của một chữ cái chỉ xảy ra một lần, tôi sẽ sử dụng một cấu trúc dữ liệu khác để theo dõi số lần mỗi chữ cái đã được nhìn thấy. Điều này sẽ cho phép bạn làm điều đó với một giải pháp O (N) thay vì một O (N2), ngoại trừ N trong trường hợp này là sự khác biệt lớn hơn giữa mã ký tự nhỏ nhất và lớn nhất hoặc chiều dài của chuỗi và do đó không trực tiếp có thể so sánh. Lưu ý: Một phiên bản trước đó của var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
2 đã sử dụng này - trong thực tế hóa ra là cực kỳ chậm. Tôi đã cập nhật nó để sử dụng mã ký tự làm chỉ mục để giữ cho việc tìm kiếm nhanh nhất có thể. Những gì chúng ta thực sự cần là một bảng băm nhưng với các giá trị nhỏ của N và tốc độ nhỏ, tương đối, có lẽ nó không đáng cho vấn đề này. Trên thực tế, bạn nên thích giải pháp của @guffa. Tôi chỉ bao gồm của tôi vì cuối cùng tôi đã học được rất nhiều từ nó.function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
Xem Fiddle tại http://jsfiddle.net/b2de4/ Ngoài ra một bài kiểm tra hiệu suất (hơi khác so với bình luận) tại http://jsperf.com/24793051/2 Đã trả lời ngày 17 tháng 7 năm 2014 lúc 1:03Jul 17, 2014 at 1:03 TVanfossontvanfossontvanfosson 516K97 Huy hiệu vàng695 Huy hiệu bạc793 Huy hiệu Đồng97 gold badges695 silver badges793 bronze badges 3 var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
Vì vậy, chúng tôi tạo ra một mảng của tất cả các ký tự, bằng cách chia tách trên bất cứ điều gì. Sau đó, chúng tôi lặp qua từng ký tự và chúng tôi lọc mảng chúng tôi tạo, vì vậy chúng tôi sẽ nhận được một mảng chỉ các ký tự đó. Nếu độ dài là 1, chúng ta biết chúng ta có một ký tự không lặp lại. Fiddle: http://jsfiddle.net/2fpzf/ Đã trả lời ngày 17 tháng 7 năm 2014 lúc 0:37Jul 17, 2014 at 0:37 Davedavedave 59,2K4 Huy hiệu vàng71 Huy hiệu bạc88 Huy hiệu đồng4 gold badges71 silver badges88 bronze badges 0 Hai khả năng khác, sử dụng các phương pháp mảng ECMA5. Sẽ trả lại var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
3 nếu không có tồn tại.JavaScript function firstNonRepeatedCharacter(string) {
return string.split('').filter(function (character, index, obj) {
return obj.indexOf(character) === obj.lastIndexOf(character);
}).shift();
}
console.log(firstNonRepeatedCharacter('aabcbd'));
Trên JSfiddle Hoặc nếu bạn muốn có hiệu suất tốt hơn một chút, đặc biệt là trên các chuỗi dài hơn. JavaScript function firstNonRepeatedCharacter(string) {
var first;
string.split('').some(function (character, index, obj) {
if(obj.indexOf(character) === obj.lastIndexOf(character)) {
first = character;
return true;
}
return false;
});
return first;
}
console.log(firstNonRepeatedCharacter('aabcbd'));
Trên JSfiddle Hoặc nếu bạn muốn có hiệu suất tốt hơn một chút, đặc biệt là trên các chuỗi dài hơn.Jul 17, 2014 at 0:46
Xotic750Xotic750Xotic750 Đã trả lời ngày 17 tháng 7 năm 2014 lúc 0:468 gold badges55 silver badges78 bronze badges 22.3k8 Huy hiệu vàng55 Huy hiệu bạc78 Huy hiệu Đồng Tôi đã đến điều này trong khi phải đối mặt với vấn đề tương tự. Hãy để tôi thêm 2 dòng của tôi. Những gì tôi đã làm là một câu trả lời tương tự như câu trả lời của Guffa. Nhưng sử dụng cả phương thức var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
1 và var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
5.function nonRepeated(str) {
for(let i = 0; i < str.length; i++) {
let j = str.charAt(i)
if (str.indexOf(j) == str.lastIndexOf(j)) {
return j;
}
}
return null;
}
nonRepeated("aabcbd"); //c
Mehod của tôi:
Đơn giản, var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
6 lần đầu tiên xuất hiện một nhân vật & var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
7 có được lần xuất hiện cuối cùng. Vì vậy, khi lần xuất hiện đầu tiên cũng là == Sự xuất hiện cuối cùng, điều đó có nghĩa là chỉ có một nhân vật.Nov 4, 2018 at 21:39 Đã trả lời ngày 4 tháng 11 năm 2018 lúc 21:39 function firstNonRepeat(str) {
// Sorting str so that all repeating characters will come together & replacing it with empty string and taking first character using substr.
var rsl = str.split('').sort().join('').replace(/(\w)\1+/g,'').substr(0,1);
if(rsl) return rsl;
else return 'All characters are repeated in ' + str;
}
console.log(firstNonRepeat('aaabcccdeeef'));
console.log(firstNonRepeat('aaacbdcee'));
console.log(firstNonRepeat('aabcbd'));
Đây là một giải pháp sử dụng Regex để thay thế tất cả các ký tự lặp lại và sau đó trả về ký tự đầu tiên.Feb 13, 2020 at 8:35
2 Đã trả lời ngày 13 tháng 2 năm 2020 lúc 8:35 Trước hết, hãy bắt đầu vòng lặp của bạn ở mức 1, không phải 0. Không có điểm nào trong việc kiểm tra ký tự đầu tiên để xem nó có lặp lại không, rõ ràng là không thể. Bây giờ, trong vòng lặp của bạn, bạn có somestring [i] và somestring [i - 1]. Họ là những nhân vật hiện tại và trước đó. Nếu somestring [i] === somestring [i - 1] thì các ký tự đang lặp lại, nếu somestring [i]! Tôi sẽ không viết hết mọi thứ cho bạn, nhưng hy vọng quá trình suy nghĩ đằng sau điều này sẽ giúp íchJul 17, 2014 at 0:40
Đã trả lời ngày 17 tháng 7 năm 2014 lúc 0:40Martin Booth Martin Boothmartin Gian hàng29 silver badges30 bronze badges 2 function FirstNotRepeatedChar(str) {
var arr = str.split('');
var result = '';
var ctr = 0;
for (var x = 0; x < arr.length; x++) {
ctr = 0;
for (var y = 0; y < arr.length; y++) {
if (arr[x] === arr[y]) {
ctr+= 1;
}
}
if (ctr < 2) {
result = arr[x];
break;
}
}
return result;
}
console.log(FirstNotRepeatedChar('asif shaik'));
8.36529 Huy hiệu bạc 30 Huy hiệu ĐồngApr 18, 2018 at 9:02 2
Đã trả lời ngày 18 tháng 4 năm 2018 lúc 9:02 const firstNonRepeating = str => {
const set = new Set();
const finalSet = new Set();
str.split('').forEach(char => {
if (set.has(char)) finalSet.delete(char);
else {
set.add(char);
finalSet.add(char);
}
})
const iter = finalSet.values();
return iter.next().value;
}
Đây là một giải pháp O (n) với 2 bộ ES6, một bộ theo dõi tất cả các ký tự đã xuất hiện và một bản theo dõi chỉ các ký tự đã xuất hiện một lần. Giải pháp này tận dụng lợi thế của thứ tự chèn được bảo quản bởi tập hợp.Oct 18, 2018 at 15:25 Đã trả lời ngày 18 tháng 10 năm 2018 lúc 15:25Andrew Heekin Andrew Heekinandrew Heekin1 gold badge6 silver badges15 bronze badges function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
06411 Huy hiệu vàng6 Huy hiệu bạc15 Huy hiệu đồngFeb 4, 2019 at 7:55 0
function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
1 Đã trả lời ngày 4 tháng 2 năm 2019 lúc 7:55 Bạn có thể sử dụng đối tượng bản đồ và đặt khóa và giá trị, trong đó giá trị bạn lưu trữ số lượng cho ký tự cụ thể đó, sau đó bạn có thể lặp qua bản đồ và kiểm tra giá trị 1 và trả về phím đó.
Đối tượng bản đồ nhớ lại thứ tự chèn ban đầu của các khóa.Feb 5, 2020 at 7:50
Đã trả lời ngày 5 tháng 2 năm 2020 lúc 7:50Saurabh Yadav 3.2381 Huy hiệu vàng9 Huy hiệu bạc20 Huy hiệu đồng 201 gold
badge9 silver badges20 bronze badges Giải pháp này sẽ hoạt động với mảng với số nguyên và chuỗi. function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
2 Đã trả lời ngày 12 tháng 3 năm 2020 lúc 12:32Mar 12, 2020 at 12:32 function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
3 Đã trả lời ngày 16 tháng 12 năm 2020 lúc 12:19Dec 16, 2020 at 12:19
1 Đổ đầy một mảng trống bằng các số không, có cùng chiều dài với mảng chuỗi và kiểm đếm số lần chúng xuất hiện qua vòng lặp. Lấy cái đầu tiên trong mảng được tính với giá trị 1. function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
4 Đã trả lời ngày 28 tháng 5 năm 2018 lúc 22:43May 28, 2018 at 22:43 Kybakkybakkybak 8003 Huy hiệu vàng12 Huy hiệu bạc28 Huy hiệu đồng3 gold badges12 silver badges28 bronze badges Bạn có thể lặp qua từng ký tự để var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
8 chữ cái đầu tiên trả về một var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
9. Điều này sẽ dẫn đến ký tự không lặp lại đầu tiên trong chuỗi đã cho:function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
5 Đã trả lời ngày 18 tháng 11 năm 2018 lúc 6:45Nov 18, 2018 at 6:45 Grant Millergrant MillerGrant Miller 25.8K16 Huy hiệu vàng140 Huy hiệu bạc157 Huy hiệu đồng16 gold badges140 silver badges157 bronze badges Đây là giải pháp của tôi có độ phức tạp về thời gian của O (n) function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
6 Đã trả lời ngày 24 tháng 2 năm 2019 lúc 12:23Feb 24, 2019 at 12:23 Đây là giải pháp của tôi bằng cách sử dụng foreach và chuyển đổi chuỗi thành một mảng function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
7 Đã trả lời ngày 6 tháng 9 năm 2019 lúc 17:01Sep 6, 2019 at 17:01 Đây là một cách tiếp cận khác: Mỗi khi bạn tìm thấy ký tự bằng nhau lưu trữ nó trong một mảng và thoát ra khỏi vòng lặp. Nếu char không được tìm thấy trong mảng thì bạn có char không lặp lại đầu tiên function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
8 Đã trả lời ngày 4 tháng 10 năm 2019 lúc 11:18Oct 4, 2019 at 11:18 EugensuniceugensunicEugenSunic 12.6k8 Huy hiệu vàng64 Huy hiệu bạc82 Huy hiệu Đồng8 gold badges64 silver badges82 bronze badges function firstNonRepeatedCharacter(string) {
for (var i = 0; i < string.length; i++) {
var c = string.charAt(i);
if (string.indexOf(c) == i && string.indexOf(c, i + 1) == -1) {
return c;
}
}
return null;
}
9Bạn có thể kiểm tra liên kết bên dưới https://codepen.io/t3veni/pen/wvvxJzm Đã trả lời ngày 12 tháng 11 năm 2019 lúc 9:55Nov 12, 2019 at 9:55 ThrivenithriveniThriveni 4.1032 Huy hiệu vàng13 Huy hiệu bạc12 Huy hiệu Đồng2 gold badges13 silver badges12 bronze badges Cách dễ dàng để giải quyết thuật toán này, rất thẳng về phía trước. function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
0
Đã trả lời ngày 22 tháng 2 năm 2020 lúc 6:40Feb 22, 2020 at 6:40 AbassabassAbass 12 huy hiệu đồng2 bronze badges Dưới đây là một giải pháp khác chỉ bằng cách sử dụng mảng, sử dụng 26 ký tự duy nhất làm độ dài của mảng: function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
1 Đã trả lời ngày 15 tháng 5 năm 2020 lúc 14:06May 15, 2020 at 14:06 Ganesh Phirkeganesh Phirkeganesh phirke 4411 Huy hiệu vàng3 Huy hiệu bạc11 Huy hiệu đồng1 gold badge3 silver badges11 bronze badges Chúng ta có thể theo dõi tần số của từng ký tự của chuỗi trong một đối tượng. Ví dụ: Đối với "AABCBD", chúng tôi có thể lưu trữ tần số là {"A": 2, "B": 2, "C": 1, "D": 1}
Điều này sẽ mất thời gian O (N). Sau đó, chúng ta có thể đi qua đối tượng này và tìm ký tự đầu tiên có tần số 1, cũng sẽ mất thời gian O (n). Vì vậy, độ phức tạp về thời gian cho phương pháp này sẽ là O (N). function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
2Lưu ý: Tôi sử dụng phương thức ES6 Object.keys có thể không hoạt động trong các trình duyệt cũ hơn.
Đã trả lời ngày 9 tháng 6 năm 2020 lúc 18:44Jun 9, 2020 at 18:44 Prakprakprak 1331 Huy hiệu bạc9 Huy hiệu đồng1 silver badge9 bronze badges function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
3 Đã trả lời ngày 30 tháng 6 năm 2020 lúc 14:33Jun 30, 2020 at
14:33 0 Tôi đã sử dụng đối tượng để theo dõi số lượng ký tự trong một chuỗi sau đó trả lại char có giá trị FA là 1. Đây là bản demo: function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
4 Đã trả lời ngày 7 tháng 8 năm 2020 lúc 11:01Aug 7, 2020 at 11:01 Salma Elshahawysalma ElshahawySalma Elshahawy 1.0722 huy hiệu vàng11 Huy hiệu bạc21 Huy hiệu đồng2 gold badges11 silver
badges21 bronze badges 1 Câu trả lời thỏa đáng và dễ hiểu nhất là như sau. function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
5Giải thích: Nó lặp qua tất cả các ký tự của một chuỗi từ tiến và lùi và sau đó so sánh các giá trị. Nếu chỉ số của cả tìm kiếm tiến và lùi là đúng thì nó sẽ trả về ký tự đó. Đã trả lời ngày 29 tháng 11 năm 2020 lúc 20:53Nov 29, 2020 at 20:53
Bilal Ahmadbilal AhmadBilal Ahmad 6668 Huy hiệu bạc13 Huy hiệu đồng8 silver badges13 bronze badges function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
6 Đã trả lời ngày 24 tháng 12 năm 2020 lúc 6:55Dec 24, 2020 at 6:55 Masum Billahmasum BillahMasum Billah 2.05121 Huy hiệu bạc20 Huy hiệu đồng21 silver badges20 bronze badges Việc thực hiện dưới đây có độ phức tạp thời gian tốt và nó chiếm các chữ cái có các trường hợp khác nhau: Các bước phải chạm vào mọi ký tự trong chuỗi để biết nó có lặp lại hay không function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
7 Đã trả lời ngày 31 tháng 7 năm 2021 lúc 19:17Jul 31, 2021 at 19:17
Dung dịch dưới đây là một loại mẫu bộ đếm tần số và nó sẽ chỉ chạy một vòng, vì vậy O (n) sẽ là độ phức tạp về thời gian. function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
8 Sao Chức Nữ 26.7K27 Huy hiệu vàng89 Huy hiệu bạc96 Huy hiệu Đồng27 gold badges89 silver badges96 bronze badges Đã trả lời ngày 8 tháng 8 năm 2021 lúc 12:38Aug 8, 2021 at 12:38 Đây là một giải pháp khác function firstNonRepeatedCharacter(string) {
var counts = {};
var i, minCode = 999999, maxCode = -1;
for (i = 0; i < string.length; ++i) {
var letter = string.charAt(i);
var letterCode = string.charCodeAt(i);
if (letterCode < minCode) {
minCode = letterCode;
}
if (letterCode > maxCode) {
maxCode = letterCode;
}
var count = counts[letterCode];
if (count) {
count.count = count.count + 1;
}
else {
counts[letterCode] = { letter: letter, count: 1, index: i };
}
}
var smallestIndex = string.length;
for (i = minCode; i <= maxCode; ++i) {
var count = counts[i];
if (count && count.count === 1 && count.index < smallestIndex) {
smallestIndex = count.index;
}
}
return smallestIndex < string.length ? string.charAt(smallestIndex) : '';
}
9 Đã trả lời ngày 28 tháng 9 năm 2021 lúc 15:26Sep 28, 2021 at 15:26 Hasan Zahranhasan ZahranHasan Zahran 1.27614 Huy hiệu bạc13 Huy hiệu đồng14 silver badges13 bronze badges Nếu bất kỳ ai tìm kiếm giải pháp một dòng n es6 var firstNonRepeatedCharacter = function(string) {
var chars = string.split('');
for (var i = 0; i < string.length; i++) {
if (chars.filter(function(j) {
return j == string.charAt(i);
}).length == 1) return string.charAt(i);
}
};
0 Đã trả lời ngày 29 tháng 9 năm 2021 lúc 17:27Sep 29, 2021 at 17:27
Làm thế nào để bạn tìm thấy ký tự không lặp lại đầu tiên trong một chuỗi?
Tìm ký tự không lặp lại đầu tiên của chuỗi đã cho .. Xóa khoảng trống khỏi một chuỗi đã cho .. Di chuyển không gian đến phía trước chuỗi trong một lần chuyển tiếp .. Xóa thêm khoảng trống khỏi một chuỗi .. Urlify một chuỗi đã cho (thay thế khoảng trắng bằng %20). In tất cả các chuỗi có thể được thực hiện bằng cách đặt không gian ..
Làm thế nào để bạn in ký tự không lặp lại đầu tiên từ một chuỗi trong JavaScript?
var firstNonrepeatEdCharacter = function (string) {var chars = string.split ('');for (var i = 0; i split(''); for (var i = 0; i < string. length; i++) { if (chars. filter(function(j) { return j == string.
Làm thế nào để bạn tìm thấy các ký tự không lặp lại?
Tìm ký tự không lặp lại đầu tiên theo chuỗi [4 cách].. Phương pháp 1: Sử dụng indexof () và lastindexof () [dễ nhất]. Phương pháp 2: Sử dụng LinkedHashMap .. Phương pháp 3: Sử dụng Set và ArrayList .. Phương pháp 4: Sử dụng Java 8 ..
Làm thế nào để bạn tìm thấy một ký tự cụ thể trong một chuỗi JavaScript?
Phương thức indexof () trả về vị trí của lần xuất hiện đầu tiên của một giá trị trong một chuỗi.Phương thức indexof () trả về -1 nếu không tìm thấy giá trị.Phương pháp indexof () là trường hợp nhạy cảm. returns the position of the first occurrence of a value in a string. The indexOf() method returns -1 if the value is not found. The indexOf() method is case sensitive. |