按字典序排在最后的子串

给你一个字符串 s,找出它的所有子串并按字典序排列,返回排在最后的那个子串。

 

示例 1:

输入:"abab"
输出:"bab"
解释:我们可以找出 7 个子串 ["a", "ab", "aba", "abab", "b", "ba", "bab"]。按字典序排在最后的子串是 "bab"。
示例 2:

输入:"leetcode"
输出:"tcode"
 

提示:

1 <= s.length <= 10^5
s 仅含有小写英文字符。

1.简单循环出所有的组合,再比较得出最大的一个数据(字典序排列的)

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
//按照字典序排序
function comp(max,new_word){
   
    let i_max = 0;
    let i_new_word = 0;
    while(i_max<max.length&&i_new_word<new_word.length){
         if(max.charCodeAt(i_max)<new_word.charCodeAt(i_new_word)){
            return new_word;
        }else if(max.charCodeAt(i_max)>new_word.charCodeAt(i_new_word)){
            return max;
        }else{
            i_max++;
            i_new_word ++;
        }
    }
    //循环结束之后,出现以下情况
    //1.当max的长度小于new_word的长度
    if(i_max>=max.length&&i_new_word>=new_word.length){//当两个元素的完全相同的时候,随便返回一个
        return max;
    }
    if(i_max>=max.length){
        return new_word;
    }
    if(i_new_word>=new_word.length){
        return max;
    }
}
var convert = function(s) {
   let temp = [];
   let max = "";
   for(let i=0;i<s.length;i++){
    for(let j=i+1;j<=s.length;j++){
        let demo  =s.substring(i,j);
        if(temp.indexOf(demo)==-1){
            temp.push(demo);//插入数据到temp中
            max = comp(max,demo);
        }
    }
   }
   console.log(max)
   return max;
};
console.log(convert("leetcode"))
超时错误

2.找出最大的元素的下标,然后切割以最大元素开头的字符串,进行字典排序比较

/**
 * @param {string} s
 * @return {string}
 */

function compBychar(max_char,new_char){
    if(max_char.charCodeAt()<new_char.charCodeAt()){
        return 1;//当新的字符大于最大值,就返回1
    }else{
        return 0;//等于或小于的时候忽略,主要是为了检索到第一个最大的元素的索引值
    }
}

var lastSubstring = function(s) {
 let temp = [];
   let max_char = s[0];
   let index = 0;//最大元素的索引值
   let max = "";
   //循环求得第一个字符是字典排序最大的元素
   for(let i=0;i<s.length;i++){
        if(compBychar(max_char,s[i])==1){//直接进行比较就可以了,不用自己写 max_char<s[i]
            max_char  = s[i];
            index = i;
        }
   }
   //查找以最元素开头的字符串所有(即t1xxxxxt2uuuuu,即t1到最后与t2到最后比较)
 for(let i=index;i<s.length;i++){
     if(s[i] == max_char){
        if(max<s.substring(i)){ 
            max = s.substring(i);
        }
     }
  }
   

  
   return max;
};

 

 

 

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/last-substring-in-lexicographical-order
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-10-27 21:43  唐糖PJS  阅读(744)  评论(0编辑  收藏  举报