Tôi cần biết liệu tất cả các ký tự trong một chuỗi có bằng nhau hay không (được tạo thành bởi cùng một ký tự). hàm phải trả về true hoặc false phụ thuộc vào tất cả các phần tử của chuỗi bằng với một char cụ thể.Cách xác định xem tất cả các ký tự trong một chuỗi có bằng nhau không
Tôi đã viết hàm này hoạt động tốt, nhưng tôi đang tìm giải pháp tối ưu (nhanh nhất), các chuỗi có thể có hàng nghìn ký tự.
function AllElementsAreEqual(Element:Char;Str:String):Boolean;
var
i : Integer;
begin
Result:=True;
if Str<>'' then
for i:=1 to Length(Str) do
if Str[i]<>Element then
begin
Result:= False;
exit;
end;
end;
CẬP NHẬT cuối cùng bằng cách sử dụng Barry Kelly Đề xuất và bổ sung các chỉ thị inline
, hiệu suất được cải thiện đáng kể.
function AllElementsAreEqual(Const Element:Char;Str:String):Boolean;inline;
type
ArrayInt = Array of Integer;
var
i : Integer;
Delta: Integer;
List : ArrayInt;
Test : Integer;
begin
Result:=True;
Delta:=(Length(Str) mod 4);
if Delta<>0 then
Str:=Str+StringOfChar(Element,4-Delta);
Test:=Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24;
List:=ArrayInt(@(Str[1]));
for i:=0 to ((Length(Str) div 4)-1) do
if List[i]<>Test then
begin
Result:=False;
exit;
end;
end;
UPDATE 2
Tôi xin lỗi nhưng tôi đã đăng một thi cũ của các giải pháp (với một lỗi), bây giờ là cố định. Nhờ có The_Fox để tạo một triển khai tốt hơn đề xuất Barry.
lý do tại sao không sử dụng "===" ba bằng thats những gì được sử dụng. so sánh nếu điều đó là hoàn toàn =. Kiểm tra kiểu dữ liệu cũng như các ký tự – Val
@Val, vì khi nào Delphi có "==="? Bạn đang bối rối với Delphi với JavaScript? –
xấu của tôi Tôi đã suy nghĩ về một cái gì đó khác ... – Val