File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change 1+ package  medium ;
2+ 
3+ public  class  UniqueSubstringsinWraparoundString  {
4+     /**A naive solution would definitely result in TLE. 
5+      * Since the pattern keeps repeating, DP is the way to go. 
6+      * Because the input consists merely of lowercase English letters, we could maintain an array of size 26, 
7+      * keep updating this array, counting the substrings that end with this letter, keep updating it with the largest one possible. 
8+      *  
9+      * Inspired by this: https://discuss.leetcode.com/topic/70658/concise-java-solution-using-dp*/ 
10+     public  static  int  findSubstringInWraproundString (String  p ) {
11+         if  (p  == null  || p .isEmpty ()) return  0 ;
12+         if  (p .length () < 2 ) return  p .length ();
13+         int  count  = 0 ;
14+         int [] dp  = new  int [26 ];
15+         dp [p .charAt (0 ) - 'a' ] = 1 ;
16+         int  len  = 1 ;
17+         for  (int  i  = 1 ; i  < p .length (); i ++) {
18+             if  (p .charAt (i ) - 1  == p .charAt (i -1 ) || (p .charAt (i ) == 'a'  && p .charAt (i -1 ) == 'z' )){
19+                 len ++;
20+             } else  {
21+                 len  = 1 ;
22+             }
23+             dp [p .charAt (i ) - 'a' ] = Math .max (len , dp [p .charAt (i ) - 'a' ]);
24+         }
25+         
26+         for  (int  i  : dp ){
27+             count  += i ;
28+         }
29+         return  count ;
30+     }
31+     
32+     public  static  void  main (String ...args ){
33+ //        String p = "a"; 
34+ //        String p = "abcgha"; 
35+         String  p  = "zab" ;
36+         System .out .println (findSubstringInWraproundString (p ));
37+     }
38+ }
Original file line number Diff line number Diff line change 11# fishercoderLeetcode  
22|  #  |      Title     |   Solutions   | Time          | Space         | Difficulty  | Tag          | Notes
33|-----|----------------|---------------|---------------|---------------|-------------|--------------|-----
4+ |467|[ Unique Substrings in Wraparound String] ( https://leetcode.com/problems/unique-substrings-in-wraparound-string/ ) |[ Solution] ( ../../blob/master/MEDIUM/src/medium/UniqueSubstringsinWraparoundString.java )  | O(n) |O(1) | Medium| DP
45| 463| [ Island Perimeter] ( https://leetcode.com/problems/island-perimeter/ ) | [ Solution] ( ../../blob/master/EASY/src/easy/IslandPerimeter.java ) |  O(m* n)| O(1) |  Easy|  
56| 462| [ Minimum Moves to Equal Array Elements II] ( https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/ ) | [ Solution] ( ../../blob/master/MEDIUM/src/medium/MinimumMovestoEqualArrayElementsII.java )  |  O(nlogn) | O(1) |  Medium| 
67|459|[ Repeated Substring Pattern] ( https://leetcode.com/problems/repeated-substring-pattern/ ) |[ Solution] ( ../../blob/master/EASY/src/easy/RepeatedSubstringPattern.java ) | O(n)|O(n) | Easy| KMP
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments