C# (.NET Core), 48 47 46 bytes, input as char array
s=>{for(int i=0;s[++i]==++s[0];);return s[0];} Explanation: the first element in the array is incremented as well as a pointer iterating the following elements. When both the first element and the current element are different, it returns the first element.
C# (.NET Core), 58 56 50 bytes, input as string
s=>{var c=s[0];while(s.IndexOf(++c)>=0);return c;} Previous 58-byte solution (referenced in the first comment):
s=>{for(int i=1;;i++)if(s[i]-s[0]>i)return(char)(s[i]-1);} Algorithms using System.Linq
The following algorithmalgorithms must add using System.Linq; (18 bytes) to the byte count and therefore isare longer, but.
I quite liked itthis one (52+18 bytes):
s=>{int i=0;return(char)(s.First(c=>c-s[0]>i++)-1);} And you also have a one-liner (45+18)-byte solution:
s=>(char)(s.Where((c,i)=>c-s[0]>i).First()-1) And a very clever (37+18)-byte solution, courtesy of Ed'ka:
s=>s.Select(e=>++e).Except(s).First()