【C#】文字列で、指定した文字が最初に出現するインデックス、最後に出現するインデックスを取得する方法
ABC053 Bで、掲題の方法を知ったのでメモを残します。
問題の概要
- 文字列Sが与えられる
- 先頭がAで末尾がZとなるような部分文字列の最大の長さを求める
解き方
最初はこう解きました。まず文字列Sを最初から確認し、Aがあった時にそのインデックスをaに格納します。その後、Zを見つけたら、ZのインデックスからAのインデックスの値を引いて部分文字列の長さを求めています。文字列最後までみるので、Zの後ろにさらにZがあったら、値は更新されます。
for (int i = 0; i < s.Length; i++) { if (s[i] == 'A' && isFirst) { a = i; isFirst = false; } if (s[i] == 'Z') { count = (i - a) + 1; } }
でも、これめんどくさいので、下記の方法をとると一発で求められます。
s.LastIndexOf('Z') - s.IndexOf('A') + 1);
LastIndexOf を使用すると、最後に値が出現したインデックスの値を取得できます。 docs.microsoft.com
例です。
string s = AKRGZKRRSZKEDRK Console.WriteLine(s.LastIndexOf('Z'));
9
このように。Zが複数あっても、最後に出現した時のインデックスを返しています。
IndexOfは逆で 、最初に出現した時のインデックスを返します。 docs.microsoft.com
string s = AKRGZKRRSZKEDRK Console.WriteLine(s.IndexOf('A'));
0
このようになります。この方法をつかうと、ABC053Bは簡単に解くことができます。