【问题标题】:Find the length of the longest substring with no consecutive repeating characters找出没有连续重复字符的最长子串的长度
【发布时间】:2014-04-17 15:38:49
【问题描述】:

在最近的一次采访中,我被要求找出没有连续重复字符的最长子字符串的长度。这与标准问题不同,因为它只考虑连续的重复字符。

例如:

WOOD : 2

Italics : 7

当然,这必须在 O(N) 时间和空间内完成。

【问题讨论】:

  • 那么你的问题是什么?
  • “WOOD”的最长子字符串肯定是两个字符吗? “WO”或“OD”
  • 这是一个非常标准的编程问题,你通常会在某个时候在大学里学习。你的尝试在哪里?
  • 如果你能找到每个字母的最后出现的位置,你就是金子。或者,您可以使用两个指针/滑动窗口方法

标签: java python algorithm


【解决方案1】:

逐个字符地向下移动字符串。跟踪您已经推进了多少个字符,而不会在 var 中重复“repeatcounter”。如果下一个字符与当前字符匹配,则将计数器记录在一个单独的变量中(仅当它大于那里已经存在的值时)并重置重复计数器。

【讨论】:

    【解决方案2】:

    在 Python 中,我会这样处理:

    def interview(s):
        current = longest = 0
        for index, char in enumerate(s):
            if index and char == s[index - 1]:
                longest, current = max(longest, current), 0
            current += 1
        return max(longest, current)
    

    【讨论】:

      【解决方案3】:
      public static void main(String[] args){
          String s = "italics";
          char[] c = s.toCharArray();
          int tmp = 1;
          for (int i = 1; i < s.length(); i++) {
              if (c[i] == c[i-1]){
                  tmp = 0;
                  continue;
              }
              tmp++;
          }
          System.out.println(tmp);
      }
      

      输出 = 1

      s = "斜体"

      输出 = 7

      【讨论】:

        【解决方案4】:

        希望以下代码对您有所帮助。谢谢。

        import java.util.HashSet;
        
        public class SubString {
            public static String subString(String input){
        
                HashSet<Character> set = new HashSet<Character>();
        
                String longestOverAll = "";
                String longestTillNow = "";
        
                for (int i = 0; i < input.length(); i++) {
                    char c = input.charAt(i);
        
                    if (set.contains(c)) {
                        longestTillNow = "";
                        set.clear();
                    }
                    longestTillNow += c;
                    set.add(c);
                    if (longestTillNow.length() > longestOverAll.length()) {
                        longestOverAll = longestTillNow;
                    }
                }
        
                return longestOverAll;
            }
        
            public static void main(String[] args) {
                String input = "kaveeshkanwal abcvdghytrqp";//"substringfindout";
                System.out.println(subString(input));
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-10-03
          • 2016-08-11
          • 2020-11-08
          • 2017-05-30
          • 2013-05-19
          • 2018-03-26
          • 2013-06-09
          • 1970-01-01
          • 2017-05-22
          相关资源
          最近更新 更多