OA题目differentKSubStrings [array]

Employ two hashset to remove duplicates.

1st for remove (or prevent) duplicate substrings

2nd for remove the duplicate chars .

Time:

O(n) forloop * O(k) every time iterate k times + O(n) iterate n times = O(n*k)

Space:

O(n) set + O(k) set + O(n) array = O(n)

knowledge:
1 create new object in a loop.
every time it create a new object, the variable have a reference to it.
2 iterator
while(it.hasNext()) {
it.next();
}
hasNext() if the iterator has more elements
next() return the next element

Trick:
to iterator a array/string, sometimes we need to do process on k substring/subarray.
The start pointer is i and the end pointer is i + j ( j from 0 to k - 1). It has two loops in common
Always remember to add another i + j < a.length in the condition part.
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < k; j++ ) { xx

}
}


public class differentKSubStrings {
    public static void diffKSubStrings(String str, int k) {
        List ret = new ArrayList<>();
        HashSet str_set = new HashSet<>();


        for (int i = 0; i < str.length() - k; i ++) {
            HashSet ch_set = new HashSet<>();    //  ??  every time it creates a new Object or once we created, ignore it.

            for (int j = 0; j < k && i + j < str.length(); j++) {   //  !! remember inside the loop ,add and notice it's not && j < str.length()
                if (ch_set.contains(str.charAt(i + j))) {
                    break;
                }
                ch_set.add(str.charAt(i + j));
            }

            if (ch_set.size() == k) {
                str_set.add(str.substring(i, i + k));
            }

            ch_set.clear();
        }

        //  add element in set to the arraylist
        Iterator iterator = str_set.iterator();

        while (iterator.hasNext()) {
            ret.add(iterator.next());   //  Iterator 的实现
        }

        //  print ret
        for (String item : ret) {
            System.out.println(item);
        }

        return;
    }


    public static void main(String[] args) {
        diffKSubStrings("awaglknagawybagwkwagl", 4);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33
  • 文/陌宇轩(黑龙江) 站在菩萨面前 每一次虔诚的跪拜 都预祝你生命的平安 我已经习惯这样 习惯了用微笑迎接苦难 尽...
    小哲小诗阅读 1,092评论 0 0
  • 昨天上完课回到办公室,发现李志远老师和胡彦平老师给青年教师诊断课进行观后指导,非常令人感动,手把手,心贴心。 最近...
    越之声英语工作室阅读 1,722评论 0 0