LargeGroupPositions-大きなグループの位置

1815 ワード

に言及
小文字からなる文字列sには、連続する同じ文字からなるパケットが含まれる.
例えば、文字列s=「abbxxxxzyy」には、「a」、「bb」、「xxxx」、「z」、および「yy」のようなパケットが含まれる.
パケットは区間[start,end]で表すことができ、startとendはそれぞれパケットの開始位置と終了位置の下付き文字を表す.前例の「xxxx」パケットは区間で[3,6]と表す.
3つ以上の連続文字を含むすべてのパケットを大きなパケットと呼びます.
各大きなグループの区間を見つけ、開始位置の下にある増分順に並べ替えた後、結果を返します.
例1:
入力:s=「abbxxxxzzy」出力:[[3,6]]説明:「xxxx」は3から始まり、6で終了する大きなパケットです.
例2:
入力:s=「abc」出力:[]解釈:「a」,「b」,「c」はいずれも要求に合致する大きなグループではない.
例3:
入力:s=「abcddeeaabbcd」出力:[[3,5],[6,9],[12,14]]解釈:大きなパケットは「ddd」,「eeee」および「bbb」
例4:
入力:s=「aba」出力:[]
ヒント:
1<=s.length<=1000 s小文字のみ
Related Topics配列
問題を解く構想.
この問題は簡単な問題で、考え方は比較的簡単です.2つの変数startとend(end-start+1は同じアルファベットを記録する個数)を定義し、startは現在のアルファベットの位置を記録し、endはアルファベットの終了位置2である.文字列の2番目の文字から遍歴し、後の文字が前の文字と同じであれば循環し続け、異なる文字は異なる文字を意味し、同じ文字の個数を計算する.満足する問題が3つより大きい場合は出力し,不足する場合は遍歴し続け,startとendを再決定する
コード:
import java.util.ArrayList;
import java.util.List;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public List> largeGroupPositions(String s) {
        List> res=new ArrayList<>();
        int start=0;
        int end=0;
        for (int i = 1; i < s.length(); i++) {
            if(s.charAt(i)==s.charAt(i-1))
            {
                end++;
                if(end!=s.length()-1)
                     continue;
            }
            if(end-start>=2)
            {
                List list=new ArrayList<>();
                list.add(start);
                list.add(end);
                res.add(list);
            }

            start=end+1;
            end=start;

        }
        return res;
    }
}

効果
info解答成功:実行時間:1 ms、Javaユーザーの100.00%を破ったメモリ消費:38.7 MB、Javaユーザーの49.82%を破った