题解 | 小红的字符串构造

import java.util.Scanner;
import java.util.HashSet;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        String s = new Scanner(System.in).nextLine().trim();
        HashSet<String> set = new HashSet<>();
        for(int i=0;i<s.length();i++) set.add(s.substring(i,i+1));
        
        if(set.size()<2){System.out.println(-1);}
        else{
            
        //创建列表
        List<String> list = new ArrayList<>();
        for(String tmp:set) list.add(tmp);

        HashMap<String,String> hsp = new HashMap<>();

        //列表映射
        for(int i=0;i<list.size();i++) hsp.put(list.get(i),list.get((i+1)%list.size()));

        //纯粹的用String去+=非常耗时,需要用StringBuffer动态字符串!
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<s.length();i++) sb.append(hsp.get(s.substring(i,i+1)));
        System.out.println(sb.toString());
        }
    }
}

对比其他人的题解,我这里强调2个重点:

①字符映射,用来省时间。提前创建a->b,b->c,c->d的映射(set一下原字符串s,把set里面的字符每一个都映射到他的下一个位置,超出size了就取模到第一个,刚好覆盖所有字符集又不会和原位置重合,满足题目要求)

②动态字符串构建,如果用String+=,即便用了方法①,也会超时,原因是String+=是不断创建新字符串,相当于new了很多下,非常耗时,所以我们要用StringBuffer动态字符串,才不会超时。

全部评论

相关推荐

优化前端性能是一个广泛的领域,有很多方法可以提高网站或应用程序的加载速度和性能。以下是一些常见的优化技巧:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=07d53be4cd034a4ab270d500feebcc8d压缩和合并文件:将CSS和JavaScript文件压缩和合并成一个文件可以减少网络请求的数量,从而加快页面加载速度。图片优化:通过压缩图片文件大小、使用适当的图像格式(如JPEG、PNG)以及懒加载技术来减少图片加载时间。缓存机制:使用浏览器缓存来存储静态资源,以减少重复下载。异步加载:将不必要的资源推迟加载,例如使用异步脚本或将JavaScript放置在页面底部。延迟加载:对于长页面或含有大量内容的页面,可以使用延迟加载技术,只在页面滚动到可见区域时加载内容。减少HTTP请求:减少网页中的资源数量,例如合并CSS和JavaScript文件、使用CSS&nbsp;Sprites技术等。响应式设计:为移动设备进行优化,使用响应式设计,确保网站在不同屏幕尺寸上都能良好显示和操作。使用CDN:使用内容分发网络(CDN)可以将静态资源分发到全球各个服务器上,加快资源加载速度。优化代码:通过减少DOM操作、避免不必要的重绘和重排等技术来优化JavaScript代码。使用性能分析工具:使用工具如Chrome开发者工具或PageSpeed&nbsp;Insights等来分析和识别潜在的性能瓶颈,并采取相应的优化措施。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务