作为求职面试的一部分,我将这些问题作为在线编码测试,我在下周被拒绝了。我试图弄清楚我是否做错了或者我是否做得对,但C#有更好的方法来完成相同的任务。
Q2)编写一种方法来查找字符串中的第一个非重复字符。
a)要写下你的答案,你可以使用你喜欢的任何语言。但是,如果您的语言已有库,则可能无法使用这些库。
b)字符串是字母字符和小写字母。 (例如,“aaaabbbcccdde” - >'e',“abcdefgh” - >'a',“aaabbbcccddd” - > null,“aabccdeef” - >'b')
我的回答:
public char? FirstNonrepeatingChar ( String s )
{
// returns the first non-repeated character in s
// returns null if no such character exists
for ( int j = 0, n = s.Length; j < n ; )
{
int i = j;
while ( j < n && s[j] == s[i] ) ++j;
if ( (j - i) == 1 ) return s[i]; // found lone character
}
return null; // if made it here, no such character exists
}
答案 0 :(得分:1)
找到第一个不重复的字符只是找到string[x-1] != string[x] && string[x] != string[x+1]
的情况。您的解决方案有效,但可以在逻辑上简化:
if( String.IsNullOrEmpty(s) ) return null;
if( s.Length == 1 ) return s[0]; // Case 1: single-character string
if( s[0] != s[1] ) return s[0]; // Case 2: first character is different
for(int i = 1; i < s.Length - 1; i++) {
// Main case 3: a sequence "aba" somewhere in the middle of the string
if( s[i-1] != s[i] && s[i] != s[i+1] ) return s[i];
}
// Case 4: last character is different
if( s[ s.Length - 2 ] != s[ s.Length - 1 ] ) return s[ s.Length - 1 ];
// Case 5: Not found
return null;