这个短些,用你的思路 static int LongestUniqueSubstring(string str) { if (string.IsNullOrEmpty(str)) return 0; var lastPosition = new Dictionary(); // or use array with len gth of #unicode_char int maxLength = 0; for (int head = 0, tail = 0; tail < str.Length; tail++) { int last; if (lastPosition.TryGetValue(str[tail], out last)) head = last + 1; else maxLength = Math.Max(maxLength, tail - head + 1); lastPosition[str[tail]] = tail; } return maxLength; }